fill 方法是一个只给已有 Eloquent 实例赋值属性的方法,注意是“只给”啊!!

在你调用 fill 方法的时候,Laravel 首先就会去检测当前 Model 的状态!

当你设置了 fillable 数组,没有设置 guarded 数组时,那么此 Model 会处于 仅可批量赋值指定属性 的状态;
当你没有设置 fillable 数组,却设置了 guarded 数组时,那么此 Model 会处于 可批量赋值任何属性 的状态;
至于你同时设置了 fillableguarded 数组的情况就不去讨论了,因为这样做本身就是被 Laravel 所禁止的;

然后调用 fillableFromArray 去获取 attributesfillable 数组的交集,如果你没有定义 fillable 或者禁用掉了守卫,那么此方法会直接返回 attributes然后 Laravel 会对返回的数组做一个循环,在这个循环中 Laravel 会对每一个属性调用 isFillable 方法检测这个属性是否可以被填充,如果没有通过此方法的检测(不存在于fillable 数组中并且没有设置 guarded 数组或存在于 guarded 数组中),那么 Laravel会检测当前 Model 是否处于 仅可批量赋值指定属性 状态,如果是,那么会直接抛出一个 Exception,然后 Laravel 会返回完成赋值操作后的 $this

以上就是 Eloquentfill 方法的源码解析啦~,Laravel 的源码读下来还是很清晰易懂的~,不得不再次佩服 Laravel 的设计,不愧为 巨匠级框架。

转自: https://www.ucloud.cn/yun/26186.html