Laravel 5 жаждет загрузить модель без прямой связи


У меня есть..

Модели :

Player
id,player_name

Sport
id,sports_name

Game
id,player_id,sports_id,scores

Модельные Отношения

Игрок хасмани игры, Спорт хасмани игры, игры принадлежать! игрок иСпорт .


Вопрос: в контроллере, Возможно ли загрузить Спорт и каждую игру на спорт в каждом игроке?

В одном запросе я хочу добиться в моем клинке чего-то подобного..

@foreach($player as $p)
  @foreach ($p->sport as $ps) /*this wont work, since player has not relationship with sports*/
    @foreach ($ps->game as $psg)
      {{$psg->id}}
      {{$psg->player_name}}
      {{$psg->sports_name}}
      {{$psg->scores}}
    @endforeach    
  @endforeach
@endforeach
Есть ли другой способ достичь этого? Спасибо!
2 2

2 ответа:

Вы можете использовать вложенную нетерпеливую загрузку : игрок имеет множество игр, игры относятся к спорту.

$player=Player::with('games','games.sport')->find($id);
foreach($player->games as $game)
{
   echo $game;
   echo $game->sport;
}

Отношение между Player и Sport также являетсямного-ко-многим .

Таким образом, вы можете определить отношение sports в модели Player следующим образом:
public function sports()
{
  return $this->belongsToMany('App\Sport', 'games')->withPivot('scores');
}

Тогда, на ваш взгляд, вы можете записать свой foreach как:

@foreach($player as $p)
  @foreach ($p->sports as $s)
      {{$p->player_name}}
      {{$s->sports_name}}
      {{$s->pivot->scores}}
  @endforeach
@endforeach