Проблема с красноречивым запросом при использовании функции with () для загрузки отношений модели - PullRequest
0 голосов
/ 17 сентября 2018

Как написать этот красноречивый запрос в Laravel, чтобы он загружал с помощью () модели отношений в этом примере между User моделью и Profile моделью?Я пытался избежать 2 отдельных запросов.

Я чувствую, что я близко, но кое-что не совсем верно.

$author = User::where('id', $id)->with('profile')->get();

Сборник корректно возвращает данные пользователя.Но это показывает профиль отношения как ноль.

  #relations: array:1 [▼
    "profile" => null
  ]

Я полагаю, что все настроено правильно с User моделью и Profile необходимыми отношениями.

User.php

public function profile()
{
    return $this->hasOne('App\AuthorProfile', 'user_id');
}

AuthorProfile.php

public function user()
{
    return $this->belongsTo('App\User');
}

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

При условии, что для таблицы модели AuthorProfile у вас есть запись с идентификатором пользователя, все должно быть в порядке.

Однако вы написали:

Я пытался избежать 2 отдельных запросов.

Что ж, это неправда, если у вас есть одна запись, энергичная загрузка вам совсем не поможет. В этом случае будет выполнено 2 запроса - независимо от того, используете ли вы готовую загрузку или нет.

Стремительная загрузка поможет, если у вас есть несколько пользователей и для каждого из них вы хотите загрузить профиль, но если у вас есть одна запись, это ничего не изменит.

Дополнительно вместо:

$author = User::where('id', $id)->with('profile')->get();

Вы должны использовать:

$author = User::with('profile')->find($id);

потому что вы ожидаете здесь одного пользователя.

0 голосов
/ 17 сентября 2018

Ваша модель должна выглядеть следующим образом. Идентификатор пользователя в таблице профиля и идентификатор в таблице пользователей

public function profile()
{
    return $this->hasOne('App\AuthorProfile', 'user_id','id');
}
0 голосов
/ 17 сентября 2018
$users = User::with('profile')->find($id);
...