我正在尝试使用Laravel的firstOrNew
方法保存数据,这会产生MassAssignmentException
错误。
我不明白为什么firstOrNew
方法应该触发批量分配异常,因为它只是在数据库中查找,而不是尝试保存任何内容。来自the docs:
firstOrNew方法,与firstOrCreate一样,将尝试定位 记录在与给定属性匹配的数据库中。但是,如果一个 找不到模型,将返回一个新的模型实例。注意 firstOrNew返回的模型尚未持久化 数据库中。
为什么我的代码应该抛出MAE:
$tour = Tour::firstOrNew(array('id' => $this->request['id']));
据我所知,上面代码所说的基本上都是"查看并查看数据库中是否有一行带有该ID,如果是,则返回该行,如果没有,则创建一个新对象与相关的属性"。它没有保存任何数据,所以问题是什么?
请注意,只有在行不存在时才会出现错误。
答案 0 :(得分:4)
firstOrNew()
使用newInstance()
使用构造函数创建新模型。 Constructor uses fill()
方法,即Mass Assigment。这就是你得到例外的原因。
因此,您需要将$fillable
数组设置为使用firstOrNew()
答案 1 :(得分:1)
当您没有在模型
中定义的可填充或保护字段时,会发生MassAssignmentException$guarded = [];
$fillable = ['explicitlydefinedfield'];
PS:你已经复制了正确说明发生了什么的文本......它没有找到记录,而是试图创建一个新记录。
firstOrNew ... NEW