2016-11-28 3 views
2

Ich habe ..Laravel 5 eifrig Last ein Modell ohne direkte Beziehung

Modelle:

Player 
id,player_name 

Sport 
id,sports_name 

Game 
id,player_id,sports_id,scores 

Modell Beziehung

SpielerhasManySpiele, Sport shasManySpiele, SpielebelongsToSpieler und Sports.


Frage: In -Controller ist es Mögliche in jedem Spieler Sport und jede Spiele pro Sport zu laden?

in einer einzigen Abfrage, ich möchte wie dies in meiner Klinge etwas erreichen ..

@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 

gibt es andere Möglichkeit, es zu erreichen? Vielen Dank!

+1

Haben Sie versucht, viele Trog Beziehung hat? https://laravel.com/docs/5.2/eloquent-relationships#has-many-through – TheFallen

Antwort

2

Sie können Nested eager loading verwenden: Spieler hat viele Spiele, Spiele gehört zu einem Sport.

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

Die Beziehung zwischen Player und Sport ist auch die many-to-many.

So können Sie eine sports Beziehung in Player Modell als definieren:

public function sports() 
{ 
    return $this->belongsToMany('App\Sport', 'games')->withPivot('scores'); 
} 

Ihrer Ansicht Dann können Sie schreiben Ihre foreach wie:

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