ich ein kleines Problem habe, habe ich eine Tabelle mit Filme und ein weiteres mit Genres ab: Action, Abenteuer etc ...Laravel 5.2 Viele zu viele Abfrage Beziehung mit where-Klausel
Tabellennamen:
- Filme
- movie_genre
- Genres
ich alle Filme mit dem ausgewählten Genre ex holen will: Aktion
$movies = Movie::with('genres')
->when($genre, function ($query) use ($genre) {
return $query->where('genres.id', $genre->id);
})
->paginate(20);
Dieser PHP-Code funktioniert nicht, wie kann ich es funktioniert?
PS: Das Genre wird aus der Ansicht nach $ _GET ['genre'] übertragen und in der Variable $ genre abgelegt.
Bearbeiten nach der Antwort von @Shane und @Marcin Nabiałek:
Die Beziehung in den Modellen gesetzt ist und wenn ich Ihren Code direkt wie folgt aus:
Movie::with('genres', 'countries', 'type')
->when($type, function ($query) use ($type) {
return $query->where('medias.type_id', $type->id);
})
->whereHas('genres', function ($query) use ($genre) {
return $query->where('genres.id', $genre->id);
})
->paginate(20);
es Arbeit perfekt, aber mit der when() Funktion nicht. Ich muss die when()
verwenden, um die Bedingung nur funktionieren zu lassen, wenn ein Genre vom Benutzer ausgewählt wurde.
Sind Sie mehrere Werte in '$ _GET [ 'Genre']' oder einzelnen Wert zu bekommen? –
Versuchen Sie 'whereHas': https://laravel.com/docs/5.2/eloquent-relationships#querying-relations – Shane
Ich bekomme nur einen Wert mit dem' $ _GET ['genre'] ''. das 'whereHas' funktioniert perfekt, aber nicht mit dem' when() 'und ich verwende es, um die Bedingung nur dann zu bearbeiten, wenn ein Genre vom Benutzer ausgewählt wurde. – Chidox