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()