Laravel - 质量分配异常错误

时间:2014-11-03 22:05:44

标签: php laravel laravel-4 eloquent

我正在尝试将多行保存到表中,但是,我看到的是Mass Assignment Error

错误是: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)。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:38)

为了能够通过将属性传递给模型的构造函数来设置属性,您需要列出$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);
}

答案 1 :(得分:12)

lukas所说的是"守卫"。而不是"白名单"你可以宣告哪些是守卫的。

例如:

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

这对我来说更有用,因为我并不关心大多数领域。

从Laravel 5.2的文档中获取,但我认为它适用于旧版本。

要允许任何字段,您只需提供一个空数组:

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

答案 2 :(得分:0)

在要在表中存储数据的模型中编写代码。 假设您的桌子是卧室,并且您创建的模型是位于app文件夹中的卧室。

在这种情况下,您必须将数据存储在$criteria_id$bedroom中,因此您应该按照以下方式将这两个字段添加到模型中。

class Bedroom extends Model 
{
    protected $fillable = ['criteria_id', 'bedroom'];
}