Вот модель структуры моего проекта Laravel 5.3,
у него есть один метод приглашения, который возвращает приглашение пользователя.
public function invitations()
{
return $this->hasMany( 'App\Invitation', 'invitee_id', 'id' );
}
У этой модели есть другой метод, который возвращает детали приглашения в приглашении.
public function inviter()
{
return $this->hasOne( 'App\User', 'id', 'invited_by' );
}
Если я хочу получить все приглашения текущего пользователя, это работает,
\Auth::user()->invitations;
Но если я попытаюсь получить информацию о приглашающем, это не сработает! (Вопрос: как это сделать?)
\Auth::user()->invitations->inviter;
Хотя я могу запросить приглашение от красноречивого объекта приглашения, как этот,
\App\Invitation::first()->inviter;
Но это не работает, когда я пытаюсь получить к нему доступ из модели пользователя -> приглашение -> приглашающий!
Также я могу использовать нетерпеливую загрузку здесь?
\Auth::user()->invitations->inviter;
Глядя на это, кажется, что вы пытаетесь получить свойство inviter из коллекция приглашений. Причина Предложение Кена использовать \App\Invitation::first()->inviter;
работает потому, что вы получаете приглашение только одного приглашения (в данном случае, первого). Чтобы решить эту проблему, переберите свои приглашения, прежде чем пытаться получить свойства для каждого:
$invitations = \Auth::user()->invitations;
foreach ($invitations as $invitation) {
$inviter = $invitation->inviter;
}
Существует также метод each () специфичные для коллекций Laravel, которые позволят вам перебрать ваш объект.
Других решений пока нет …