2017-01-27 9 views
2

Вот примерная структура моего проекта Laravel 5.3Найти ребенок модель hasMany отношение в Laravel красноречивого


  • User.php (модель)

имеет один метод приглашения, который возвращает приглашение пользователя.

public function invitations() 
{ 
    return $this->hasMany('App\Invitation', 'invitee_id', 'id'); 
} 

  • Invitation.php (модель)

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

public function inviter() 
{ 
    return $this->hasOne('App\User', 'id', 'invited_by'); 
} 

Если я хочу, чтобы получить все приглашения текущего пользователя он работает,

\Auth::user()->invitations; 

Но если я пытаюсь получить информацию о приглашающем он не будет работать! (Вопрос: Как это сделать)

\Auth::user()->invitations->inviter; 

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

\App\Invitation::first()->inviter; 

Но это не работает, когда я пытаюсь получить доступ к нему из пользовательской модели -> приглашение -> inviter! Также могу ли я использовать загрузку здесь?

+0

Да, вы можете с уверенностью загружать их с помощью ':: with ('user')' при обращении к модели. Что вы получите при вызове '\ App \ Invitation :: first() -> inviter;'? – Ken

+0

@Ken 'dd (\ App \ Invitation :: first() -> inviter);' return this: http://i.imgur.com/Yfc7szA.png – rakibtg

ответ

1
\Auth::user()->invitations->inviter; 

Глядя на это, кажется, что вы пытаетесь получить свойство приглашающего из коллекции приглашений. Причиной Ken's suggestion для использования \App\Invitation::first()->inviter; является то, что вы получаете приглашение только одного приглашения (в данном случае, первого). Чтобы решить эту проблему, проходное ваши приглашения, прежде чем пытаться получить свойства для каждого из них:

$invitations = \Auth::user()->invitations; 

foreach ($invitations as $invitation) { 
    $inviter = $invitation->inviter; 
} 

Существует также an each() method специфичны для Laravel коллекций, которые позволят вам перебрать объекта.