Какая разница при использовании метода Model с и без ()? - PullRequest
0 голосов
/ 30 ноября 2018

Если у меня есть модель для запроса UserUser имеет внешне связанную таблицу Address.

public function address() {
   return $this->hasOne('Address', 'id');
}

Мое сомнение ниже: 1.Мы можем использовать User->address, чтобы получить данные из таблицы Address.Мы также можем использовать User->address() для получения данных.Я могу dd их получить атрибуты. В чем разница между двумя способами?2. Когда я использую User->address->first(), он возвращает первые данные в Address, а не первые данные, которые соответствуют указанному id. Но я использую User->address()->first(), чтобы получить правильные данные.

Чтопричина вышесказанного?

Ответы [ 4 ]

0 голосов
/ 19 декабря 2018

Насколько я знаю, $model->address получить элемент реляционных данных, $model->address() получить экземпляр реляционной модели для пользовательского оператора.Если вы хотите использовать $ model-> address (), вы должны использовать любые методы построения запросов для получения любых данных.и т. д. $model->address()->where('status', true)->get() $model->address()->count()

0 голосов
/ 30 ноября 2018

Когда речь идет о связях Eloquent, в этом случае ->address является сокращением для ->address()->first, и оно "кэширует" результат запроса на вашем User объекте.Поэтому многократный вызов ->address не вызовет дополнительных запросов к базе данных.Вызов ->address()->first() сделает запрос к базе данных каждый раз.

0 голосов
/ 01 декабря 2018

основное отличие заключается в следующем

$model->address

возвращает отношение

$model->address()

возвращает экземпляр построителя запросов, который можно использовать для дальнейшего ограниченияследующим образом

$model->address(function($query){
         $query->where('postcode', 'testpostcode');
}
0 голосов
/ 30 ноября 2018

Обычно, когда вы используете $user->address, Laravel ищет в модели User свойство адреса или метод getAddressAttribute() в модели User.

Метод address() вызывается только при использовании () подобно $user->address().

Документация по методам доступа Laravel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...