2014-11-03 131 views
11

我試圖將多行保存到一張表中,但是,我提供了一個Mass Assignment ErrorLaravel - 質量分配異常錯誤

的錯誤是:Illuminate \ Database \ Eloquent \ MassAssignmentException criteria_id

$criteria->save(); 

    $criteria_id = $criteria->id; 

    foreach(Input::get('bedrooms') as $bedroom){ 
     $new_bedroom=array(
      'criteria_id' => $criteria->id, 
      'bedroom' => $bedroom, 
      ); 
     $bedroom = new Bedroom($new_bedroom); 
     $bedroom->save(); 
    } 

我的數據庫結構爲:

screenshot

,這樣就不會有任何不正確的拼寫。 criteria_id來自最近保存的條件中的變量(請參閱上面的forloop代碼)。

任何幫助將不勝感激。

+1

是模型的'$ fillable'數組中的'criteria_id'? – lukasgeiter 2014-11-03 22:09:36

+0

@lukasgeiter,不,它不是。該數組是空的。我必須在代碼中訪問這個變量,這個變量完全正常,也就是在'foreach'循環中。 - ' - >附加($ criteria_id)'。 – Ben 2014-11-03 22:11:24

回答

33

爲了能夠通過將屬性傳遞給模型的構造函數來設置屬性,需要列出$fillable數組中需要的所有屬性。正如Docs

class Bedroom extends Eloquent { 
    protected $fillable = array('criteria_id', 'bedroom'); 
} 

提到此外,如果你願意,你可以使用create方法。它創建了一個新的模式,並直接將其保存:

foreach(Input::get('bedrooms') as $bedroom){ 
    $new_bedroom=array(
     'criteria_id' => $criteria->id, 
     'bedroom' => $bedroom, 
     ); 
    $bedroom = Bedroom::create($new_bedroom); 
} 
+0

就像紅寶石在rails上一樣,從來不知道雄辯'attr_accessible' – 2015-12-24 15:11:36

9

盧卡斯說,什麼是「守衛」。除了「白名單」字段之外,您可以聲明哪些是被守護的。

例如:

class Bedroom extends Model 
{ 
    protected $guarded = ['id']; 
} 

這是更有用的我,因爲我真的不關心大多數領域。

從Laravel 5.2的文檔中獲得,但我認爲它適用於舊版本。

允許任何領域,你可以只提供一個空數組:

class Bedroom extends Model 
{ 
    protected $guarded = []; 
}