Laravel 5.x - Eloquent模型如何成为QueryBuilder?

时间:2018-05-13 09:30:45

标签: php laravel laravel-5 eloquent

我试图理解Eloquent模型如何也是一个查询构建器。我在源代码中看不到Illuminate\Database\Eloquent\Model类和Illuminate\Database\Query\Builder类之间的任何多态关系。这两个类之间没有继承或接口实现。

那么,有没有人可以解释一下Laravel如何使一个雄辩的模型成为查询构建者?提前谢谢。

编辑:我问的是这个问题,因为我不明白如何通过我的模型调用Builder课程中的方法,例如ModelObject::orderBy('created_at', 'asc')->get(),其中orderBy()是Builder类中的方法。

1 个答案:

答案 0 :(得分:4)

Eloquent基础模型上有一个query()函数,它在被调用时创建一个新的查询构建器实例(模型表已经为构建器设置)。您可以找到函数here

除此之外,魔术__call()__callStatic()函数创建一个新的查询构建器,并在调用函数时将方法调用委托给此构建器,该函数不是Eloquent模型的一部分,并且它们是没有隐含的要求(例如increment()decrement())。您可以找到此here的代码。

总结一下:它的神奇之处。神奇的功能。