create () 和 save () 方法的底层原理是什么?
在laravel文档中看到了create和save操作数据。但是需要注意的是,fillable 与 guarded 只限制了 create 方法,而不会限制 save。
实例:
注意此时模型中的$fillable没加入user_id。
使用create报错,使用save是正常,不用管模型的fillable 与 guarded
但是我看了源码,没看懂。想知道有没有大神告知一下,从源码角度找出这个区别。
关于 LearnKu
大概看了一下源码,大致分析一下模型的
create方法最终通过__call魔术方法调用了Illuminate/Database/Eloquent/Builder.php里面的create方法:然后通过查看
newModelInstance方法:然后再通过查看
newInstance方法:注意这一句:
实例化当前模型实例,传入了模型对应的属性数组.然后这句代码就会触发模型的
__construct方法:注意查看
fill这个方法,就是填充模型属性的,点开fill这个方法查看点开
fill这个方法后,可以看见填充模型属性的时候调用了isFillable这个方法:在
isFillable这个方法中做了对模型unguarded和fillable的检查判断:例如这段代码:
点开
getFillable这个方法,可以看到如下代码:返回的就是模型的fillable属性数组,
看到这里就可以看到最终的实现了.得出的结论就是每次调用
create方法都会检查模型的unguarded和fillable属性的.