2014-11-03 85 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 = []; 
}