laravel-почему вызов функции без скобок?

Я вижу это в учебнике laravel:

Auth::user()->item;

где элемент является функцией, внутри modelsUser.на PHP :

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

где элемент для моделейItem.в PHP

так почему скобки не нужны, когда вызывается функция элемента ? Например:Auth::user()->item(); Если я поставлю скобки, браузеры сойдут с ума и рухнут.

кроме того, если я переименую элемент.PHP в место № 2.php, переименуйте элемент класса в Item2, и я сделаю hasMany('Item2', 'owner_id'), это не сработает. Но почему ? Где "Предмет" пришел ?

спасибо,

Патрик

2 ответов


Laravel использует магическую функцию __get для обработки произвольных атрибутов.

это Illuminate\Database\Eloquent\Model ' s getAttribute функция, которая проверяет отношения модели и возвращает связанные элементы, если связь присутствует с этим именем.

скобки не нужны, потому что getAttribute автоматически выполняет функцию items() если атрибут items запрос. Вы можете, кстати, запросить Auth::user()->item(); который вернет построитель запросов, который вы можете работать с.


метод item() настройка отношения для красноречивого ORM о том, как подготовить запрос. зову ->item говорит красноречиво через свое Динамические Свойства что вы хотите элемент, а затем красноречивый будет использовать метод. Вы можете вызвать метод напрямую, только если он совместим с Конструктор Запросов. Пример, который вы приводите, должен работать в любом случае, но может быть что-то, чего мне не хватает.