我创建了一个名为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方法,它看起来更干净,更简单。
答案 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
中存在值)。
希望它能帮助你和其他人。