来自firstOrNew的laravel MassAssignmentException由id

时间:2016-11-30 12:22:36

标签: laravel laravel-5 mass-assignment

我正在尝试使用Laravel的firstOrNew方法保存数据,这会产生MassAssignmentException错误。

我不明白为什么firstOrNew方法应该触发批量分配异常,因为它只是在数据库中查找,而不是尝试保存任何内容。来自the docs

  

firstOrNew方法,与firstOrCreate一样,将尝试定位   记录在与给定属性匹配的数据库中。但是,如果一个   找不到模型,将返回一个新的模型实例。注意   firstOrNew返回的模型尚未持久化   数据库中。

为什么我的代码应该抛出MAE:

$tour = Tour::firstOrNew(array('id' => $this->request['id']));

据我所知,上面代码所说的基本上都是"查看并查看数据库中是否有一行带有该ID,如果是,则返回该行,如果没有,则创建一个新对象与相关的属性"。它没有保存任何数据,所以问题是什么?

请注意,只有在行不存在时才会出现错误。

2 个答案:

答案 0 :(得分:4)

firstOrNew()使用newInstance()使用构造函数创建新模型。 Constructor uses fill()方法,即Mass Assigment。这就是你得到例外的原因。

因此,您需要将$fillable数组设置为使用firstOrNew()

答案 1 :(得分:1)

当您没有在模型

中定义的可填充或保护字段时,会发生MassAssignmentException
$guarded = [];
$fillable = ['explicitlydefinedfield'];

PS:你已经复制了正确说明发生了什么的文本......它没有找到记录,而是试图创建一个新记录。

firstOrNew ... NEW