2017-08-04 57 views
0

我正在使用laravel框架,並且我試圖在表「產品」
中創建新記錄,並且該表有4個字段( 'ID', '姓名', '價格', '秒')。

當我寫這篇代碼的新行添加到表成功

class productModel extends Model 
{ 
    public $fillable = ['price','name']; 
    public $table = 'product'; 
    public $timestamps = false; 
    public static function add(){ 
     $model = new productModel(); 
     $model->price = 6;  
     $model->name = 'pro2'; 
     $model->sec = 33; 
     $model->save(); 
    } 
} 

但是當我寫這篇文章的代碼錯誤顯示:
QLSTATE [HY000]:常規錯誤:1364字段「秒」不具有默認值(SQL:插入productnameprice)值(飛行10,44))

class productModel extends Model 
{ 
    public $fillable = ['price','name']; 
    public $table = 'product'; 
    public $timestamps = false; 
    public static function add(){ 
     productModel::create(['name' => 'Flight 10','price' => 44,'sec' => 
     'content']); 
    } 
} 

但是當我把'sec'字段放在$ fillable數組中時,它運行良好,那麼問題是什麼?

+0

這是預期的行爲。這是可填充數組的全部要點。 '$ fillable'數組定義了可以批量分配的屬性,從而可以安全地執行諸如'productModel :: create($ request-> all())' – jfadich

回答

2

你得到的錯誤來自你的數據庫,而不是Laravel。

當您明確指定該值(如在您的第一個片段中)時,您並未對其進行批量分配,因此$fillable中的內容無關緊要。你給它一個價值,所以你的數據庫很開心​​。

如果在可填充陣列中沒有'秒',則在使用create(即批量分配值)時,沒有爲其分配值。所以,當Laravel保存你的數據時,它會將null傳遞給數據庫,然後數據庫響應:「嘿,這個字段不是空的,也沒有默認值,所以你必須告訴我該寫入什麼內容。」

所以,你的選擇是:

  1. 更新數據庫模式,使場空,或在數據庫級別添加默認值。
  2. 將「sec」放入您的$fillable陣列中,以便可以進行批量分配。
  3. 在創建流程的某處(設置數據的位置或某些中間件層,如驗證)中將其明確設置。

您選擇哪種方式將取決於您的需求。

相關問題