使用Laravel的ORM - 速记和速记有什么区别?

时间:2014-02-06 01:50:46

标签: laravel eloquent

例如:

return Product::first()->BaseProduct->Products

有效,而

return Product::first()->BaseProduct()->Products()

没有,我得到BadMethodCallException

据我所知,这两行之间存在显着差异,但差异是什么,它是如何运作的?

1 个答案:

答案 0 :(得分:3)

我假设BaseProduct()和Products()都是模型中的关系?调用Products()不会返回有说服力的对象,它将返回hasMany或belongsToMany(Relation of children)对象。

调用Products而不是Products()会触发魔法get方法。这个魔术get调用Relation对象的getResults()方法。这样您实际上可以获得产品模型的集合。这通常是您应该处理关系的方式。

换句话说:

BaseProduct::first()->Products == BaseProduct::first()->Products()->getResults()

我建议您查看source code