Laravel 模型方法 fill( )的剖析
fill
方法是一个只给已有 Eloquent
实例赋值属性的方法,注意是“只给”啊!!
在你调用 fill
方法的时候,Laravel
首先就会去检测当前 Model
的状态!
当你设置了 fillable
数组,没有设置 guarded
数组时,那么此 Model
会处于 仅可批量赋值指定属性 的状态;
当你没有设置 fillable
数组,却设置了 guarded
数组时,那么此 Model
会处于 可批量赋值任何属性 的状态;
至于你同时设置了 fillable
与 guarded
数组的情况就不去讨论了,因为这样做本身就是被 Laravel
所禁止的;
然后调用 fillableFromArray
去获取 attributes
与 fillable
数组的交集,如果你没有定义 fillable
或者禁用掉了守卫,那么此方法会直接返回 attributes
然后 Laravel
会对返回的数组做一个循环,在这个循环中 Laravel
会对每一个属性调用 isFillable
方法检测这个属性是否可以被填充,如果没有通过此方法的检测(不存在于fillable
数组中并且没有设置 guarded
数组或存在于 guarded
数组中),那么 Laravel
会检测当前 Model
是否处于 仅可批量赋值指定属性 状态,如果是,那么会直接抛出一个 Exception
,然后 Laravel
会返回完成赋值操作后的 $this
。
以上就是 Eloquent
中 fill
方法的源码解析啦~,Laravel
的源码读下来还是很清晰易懂的~,不得不再次佩服 Laravel
的设计,不愧为 巨匠级框架。
转自: https://www.ucloud.cn/yun/26186.html