Laravel 5.6中Eloquent Model的create方法代码位置咨询
Laravel 5.6中
create()方法的位置解析 哈哈,这个问题我当初第一次找的时候也懵过!其实create()方法并不在Model类或者那些关联的trait里,它藏在查询构建器的实现中,具体流程是这样的:
- 首先,当你调用静态方法
App\Flight::create(...)时,实际上触发的是Illuminate\Database\Eloquent\Model类中的__callStatic魔术方法。这个方法的作用是把静态调用转发给模型的查询构建器实例。 - 然后,查询构建器实例是由
Model的newQuery()方法创建的,它返回的是Illuminate\Database\Eloquent\Builder类的对象。 - 真正的
create()方法就定义在Illuminate\Database\Eloquent\Builder类里!这个方法会先通过fill()处理批量赋值的属性(这一步会用到GuardsAttributestrait里的守卫逻辑),然后调用save()完成模型的创建和保存。
简单说,create()是查询构建器提供的快捷方法,模型通过魔术方法把调用转发给了它,所以你直接在Model类里找不到它的定义~
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

