Php Laravel5.x-雄辩的模特怎么可能是QueryBuilder?
我试图理解一个雄辩的模型如何也能成为一个查询生成器。在源代码中,我看不到Php Laravel5.x-雄辩的模特怎么可能是QueryBuilder?,php,laravel,laravel-5,eloquent,Php,Laravel,Laravel 5,Eloquent,我试图理解一个雄辩的模型如何也能成为一个查询生成器。在源代码中,我看不到illumb\Database\Eloquent\Model类和illumb\Database\Query\Builder类之间的任何多态关系。这两个类之间没有继承或接口实现 那么,有谁能解释一下拉威尔是如何让一个雄辩的模型成为一个查询生成器的呢?提前谢谢 编辑:我问这个问题是因为我不明白如何通过我的模型调用Builder类中的方法,例如ModelObject::orderBy('created_at','asc')->ge
illumb\Database\Eloquent\Model
类和illumb\Database\Query\Builder
类之间的任何多态关系。这两个类之间没有继承或接口实现
那么,有谁能解释一下拉威尔是如何让一个雄辩的模型成为一个查询生成器的呢?提前谢谢
编辑:我问这个问题是因为我不明白如何通过我的模型调用Builder
类中的方法,例如ModelObject::orderBy('created_at','asc')->get()
,其中orderBy()是Builder
类中的一个方法。有一个查询()
函数,该函数在调用时创建一个新的查询生成器实例(模型表已为生成器设置)。你可以找到这个函数
除此之外,magic\uuuu call()
和\uuuu callStatic()
函数创建一个新的查询生成器,并在调用一个不属于雄辩模型一部分且没有隐式调用的函数时将方法调用委托给该生成器(如increment()
,decrement()
)。你可以找到这个的代码
总之,这是一种魔力。魔法功能。请发布导致问题的代码。您可能没有调用get方法来检索结果?@TPHughes,您好,实际上没有问题。代码运行良好。我只是想了解如何通过模型调用
Builder
类中的方法。请看我编辑的问题。谢谢。Model::newQuery()
创建一个查询生成器实例,该实例最终创建Model
的集合或实例。当您执行诸如Model::where
或其他查询生成器方法时,也会在后台调用该方法model@apokryfos非常感谢。现在我对Model
类有了更深入的了解。因此,每当调用不属于Model
类的方法时,将自动调用\uu call()
或\uu callStatic()
,这两个方法将创建一个新的查询生成器,并通过新创建的查询生成器调用该方法。我说的对吗?是的,但实际模型是被考虑的,而不仅仅是基本模型的方法。因此,模型上的自定义方法(如关系)仍然有效,不会触发神奇的函数调用。顺便说一句,Laravel在其他地方也使用了这些魔法函数。我现在的想法更好了,但我仍然需要更多地了解这些魔法函数。非常感谢Namoshek抽出时间。