Laravel 来自 firstOrNew 的 MassAssignmentException by id
Laravel MassAssignmentException from firstOrNew by id
我正在尝试使用 Laravel 的 firstOrNew
方法保存数据,该方法产生 MassAssignmentException
错误。
我不明白为什么 firstOrNew
方法会触发批量分配异常,因为它只是 查找 数据库,而不是试图保存任何内容。来自 the docs:
The firstOrNew method, like firstOrCreate will attempt to locate a
record in the database matching the given attributes. However, if a
model is not found, a new model instance will be returned. Note that
the model returned by firstOrNew has not yet been persisted to the
database.
那为什么我的代码应该抛出 MAE:
$tour = Tour::firstOrNew(array('id' => $this->request['id']));
据我了解,上面的代码基本上都是"look and see if there is a row in the database with that ID, if so then return the row, if not, then create a new object with the relevant properties"。它没有保存任何数据,这是什么问题?
请注意,仅当该行不存在时才会出现此错误。
MassAssignmentException 当您没有在模型中定义可填写或受保护的字段时发生
$guarded = [];
$fillable = ['explicitlydefinedfield'];
PS:您已经复制了准确说明正在发生的事情的文本...它没有找到记录,正在尝试创建一个新记录。
firstOrNew ... 新
firstOrNew()
uses newInstance()
which creates new model using constructor. Constructor uses fill()
方法,即 Mass Assigment。这就是你得到异常的原因。
因此,您需要设置 $fillable
数组才能使用 firstOrNew()
我正在尝试使用 Laravel 的 firstOrNew
方法保存数据,该方法产生 MassAssignmentException
错误。
我不明白为什么 firstOrNew
方法会触发批量分配异常,因为它只是 查找 数据库,而不是试图保存任何内容。来自 the docs:
The firstOrNew method, like firstOrCreate will attempt to locate a record in the database matching the given attributes. However, if a model is not found, a new model instance will be returned. Note that the model returned by firstOrNew has not yet been persisted to the database.
那为什么我的代码应该抛出 MAE:
$tour = Tour::firstOrNew(array('id' => $this->request['id']));
据我了解,上面的代码基本上都是"look and see if there is a row in the database with that ID, if so then return the row, if not, then create a new object with the relevant properties"。它没有保存任何数据,这是什么问题?
请注意,仅当该行不存在时才会出现此错误。
MassAssignmentException 当您没有在模型中定义可填写或受保护的字段时发生
$guarded = [];
$fillable = ['explicitlydefinedfield'];
PS:您已经复制了准确说明正在发生的事情的文本...它没有找到记录,正在尝试创建一个新记录。
firstOrNew ... 新
firstOrNew()
uses newInstance()
which creates new model using constructor. Constructor uses fill()
方法,即 Mass Assigment。这就是你得到异常的原因。
因此,您需要设置 $fillable
数组才能使用 firstOrNew()