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
говорит красноречиво через свое Динамические Свойства что вы хотите элемент, а затем красноречивый будет использовать метод. Вы можете вызвать метод напрямую, только если он совместим с Конструктор Запросов. Пример, который вы приводите, должен работать в любом случае, но может быть что-то, чего мне не хватает.