laravel - 为什么函数调用没有括号?

时间:2014-10-22 16:17:31

标签: function laravel foreign-key-relationship parentheses

我在laravel教程中看到了这一点:

Auth::user()->item;

其中item是一个函数,在models \ User.php:

function item() { return $this->hasMany('Item', 'owner_id'); }

其中Item用于models \ Item.php

那么为什么在调用item函数时不需要括号?喜欢:Auth::user()->item(); 如果我把括号括起来,那么浏览器会变得疯狂并崩溃。

另外,如果我将Item.php重命名为Item2.php,将类Item重命名为Item2,而我hasMany('Item2', 'owner_id'),则无效。但为什么 ? 'Item'来自哪里?

谢谢,

帕特里克

2 个答案:

答案 0 :(得分:8)

Laravel使用魔术函数__get来处理任意属性。

这将调用Illuminate\Database\Eloquent\Model的{​​{1}}函数,该函数检查模型的关系,并在与该名称存在关系时返回相关项。

不需要括号,因为getAttribute在请求属性getAttribute时自动执行函数items()。顺便说一下,您可以请求items,它将返回您可以使用的查询构建器。

答案 1 :(得分:1)

方法item()正在为Eloquent ORM建立关于如何准备查询的关系。调用->item告诉Eloquent通过其Dynamic Properties你想要Item,然后Eloquent将使用该方法。如果方法与Query Builder兼容,则只能直接调用该方法。您给出的示例应该以任何方式工作,但可能会有一些我遗漏的东西。