Model.php 452 行是 fill() 函数,通过溯源找到调用位置 update():

return $this->fill($attributes)->save($options);

回到 fill() 函数,函数体内对 $attributes,也就是传入的更新数组参数,进行遍历,判断字段 key 是否可填充。如果可以填充则设置 model 属性,否则判断是否模型完全看守,如果是,则抛出异常 MassAssignmentException

模型完全看守的判定条件是 $fillable 属性(数组)为空,看守属性为默认的 [*](所有属性)。也就是说,在批量更新属性时,需要设置模型的可填属性 $fillable,否则就抛出异常。可以使用 Eloquent::unguard(); 关闭看守。

所以对相关模型设置 $fillable 属性即可解决该问题

class Test extends Model
{
    protected $fillable = ['id', 'xxx'];
}

后续如果修改或添加了表字段,而该字段是通过 update() 更新的,那么也需要记得修改或添加 $fillable 数组元素,不然数据是无法写入到表中的。