无法使用Eloquent创建方法创建模型。告诉MassAssignMentException时出错

时间:2013-09-09 13:53:52

标签: laravel laravel-4 eloquent

我创建了一个名为Author的模型。我尝试使用如下的雄辩创建方法创建模型:

public function postCreate(){
   Author::create(array(
       'user' => Input::get('user'),
       'info' => Input::get('info') 
   ));
   return Redirect::to('authors')
        ->with('message', 'User created successfully');
}

'user'和'info'是表单元素的名称。我确信我并没有误解错字。当我运行它时,不会创建模型并显示MassAssignmentException。

但是当我尝试使用以下方法时,模型已创建并保存在表

public function postCreate(){

    $author = new Author;
    $author->name = Input::get('user');
    $author->info= Input::get('info');
    $author->save();

    return Redirect::to('authors')
        ->with('message', 'User created successfully');

}

而且我真的想使用create方法,它看起来更干净,更简单。

5 个答案:

答案 0 :(得分:10)

这应该适合你:

1)已经由@fideloper和@-shift-exchange列出,在您的作者模型中,您需要创建以下字段(这是您希望可用于自动填充的所有数据库列的白名单[质量]作业])

 protected $fillable = array('user','info', ... ,'someotherfield'); 

2)使用以下代码来激发质量分配机制

$author = new Author;
$author->fill(Input::all());
$author->save();

答案 1 :(得分:3)

当我像这样扩展我的模型时,我得到了MassAssignmentException。

class Author extends Eloquent {

}

我试图像这样插入数组

Author::create($array);//$array was data to insert.
当我创建作者模型时,

问题已解决,如下所示。

class Author extends Eloquent {
    protected $guarded = array();  // Important
}

参考https://github.com/aidkit/aidkit/issues/2#issuecomment-21055670

答案 2 :(得分:2)

您需要设置Mass Assignment fields。在您的作者模型中:

类作者扩展了Eloquent {

protected $fillable = array('name', 'bio');

}

答案 3 :(得分:1)

您的模型需要设置$ fillable变量。

有关详细信息,请参阅mass-assignment上的文档。

在您的作者模型中看起来像这样:

protected $fillable = array('user', 'info');

答案 4 :(得分:0)

您需要使用protected $fillable属性,为其指定要填充/赋值的字段/列数组。例如,您有一个包含字段f1, f2, f3 and f4的模型。您想要将值分配给f1, f2 and f3 but not to f4,然后您需要使用:

protected $fillable = ['f1', 'f2', 'f3'];

上面的行允许将数组传递给:

$mod = Model::create($arr);
$mod->save();

无论$ arr数组包含什么,但只会为f1, f2, and f3分配值(如果$arr array for f1, f2, f3中存在值)。

希望它能帮助你和其他人。