Ich habe eine URL, die so aussieht: site.com/athletes/1
Jeder Athlet kann viele Positionen haben. Von der oben genannten URL versuche ich, alle Athleten, die zur Positions-ID von 1 gehören, zu bekommen. Meine Beziehung funktioniert großartig, aber ich gebe alle Athleten zurück, ungeachtet des URL-Segments.Laravel: Wie kann ich wo auf einer with-Anweisung verwenden?
Ich habe 3 Tabellen: athletes
, positions
& athlete_position
.
athletes
id
name
positions
id
name
athlete_position
athlete_id
position_id
Athlete.php
public function positions()
{
return $this->belongsToMany('App\Position', 'athlete_position', 'athlete_id', 'position_id');
}
Position.php
public function athletes()
{
return $this->belongsToMany('App\Athlete');
}
AthleteController.php
public function position(Position $position) {
$athletes = Athlete::with('positions')->get();
dd($athletes); // returns all athletes with the position relationship
}
Es ist wie ich so etwas wie dies benötigen:
$athletes = Athlete::with('positions')->where('position_id', '=', $position->id)->get();
Aber das ist nicht die Beziehung funktioniert nicht richtig. Gibt es eine Möglichkeit, eine where
Klausel in dem Modell zu verwenden? So, wenn ich die URL site.com/athletes/2
besuche, bekomme ich nur die Athleten zurück, die zur Positionsidentifikation von 2 gehören?
Vielen Dank für Anregungen!
EDIT
Alles funktioniert super! Vielen Dank @Lagbox! Es stellte sich wieder heraus, dass ich über alles nachdachte.
Nur eine kurze Follow-up-Frage. Was ist der beste Weg, wenn ein Athlet zu Position 1 gehört und Position 2?
Wenn ich die Athleten aus meiner Sicht durchlaufe, sollte ich einfach die Positions-ID gegen das URL-Segment prüfen, um nur die spezifische Position anzuzeigen?
Etwas wie:
@foreach($athletes as $athlete)
@foreach($athlete->positions as $position)
@if($position->id == {{ Request::segment(3) }}
// Show the athlete
@endif
@endforeach
@endforeach
Ansonsten, da der Athlet angehört wird in den Ergebnissen zeigen sich zweimal id 1 und 2, dass Sportler zu positionieren. Ich möchte nur, dass der Athlet einmal auftaucht - für die gewünschte Position.
Zum Beispiel: site.com/athletes/position/1
Dies ist, was ich jetzt sehe.
Athlete
name: Foo
position_id: 1
Athlete
name: Foo
position_id: 2
Athlete
name: Bar
position_id: 1
Athlete
name: Bar
position_id: 2
Aus der gleichen URL oben, ist es das, was ich möchte zurück bekommen:
Athlete
name: Foo
position_id: 1
Athlete
name: Bar
position_id: 1
Das ist absolut fantastisch. Vielen Dank für Ihre Antwort. Dein Blogpost ist super! Alles funktioniert super - ich habe nur eine Nachfolgefrage. Ich habe meine Frage aktualisiert. – Damon
AAAHHH! Ich bekomme Tunnelblick auf den Athleten und verliere die Tatsache, dass ich die Inverse nutzen und die Position nutzen kann, um auch die Athleten zu bekommen. Vielen Dank für Ihre Zeit! – Damon