Laravel Eager-loading работает только при вызове атрибута - PullRequest
0 голосов
/ 22 апреля 2019

Я определил свою модель слота для загрузки отношений из модели пользователя следующим образом:

public function userAssignedFull(): HasOne {
    return $this->hasOne(User::class,'id','user_assigned');
}

(таблица «slots» содержит поле «user_assigned», с помощью которого я подключаюсь к записям пользователя по «id»))

Следующий код находит модель слота, но без 'userAssignedFull'.Я получаю только идентификатор пользователя в 'user_assigned'.

  $slot = Slot::with('userAssignedFull')->find($slot_id);

Но при последующем вызове это возвращает мне требуемое отношение:

$fullUserModel = $slot->userAssignedFull;

Может кто-нибудь сказать мне, что я делаю неправильно?

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Builder::with() возвращает экземпляр Builder .

Так что вам нужно вызвать $slot->userAssignedFull;, чтобы получить сбор данных.

Из документов :

При доступе к отношениям Eloquent в качестве свойств данные отношений «загружаются с отложенной загрузкой».Это означает, что данные отношения не фактически загружены, пока вы не получите первый доступ к свойству .

И этот $slot->userAssignedFull; - ваш "первый доступсобственность ".

0 голосов
/ 22 апреля 2019

Попробуйте это

$slot = Slot::where('id', $slot_id)->with('userAssignedFull')->first();
$slot->userAssignedFull;
...