2 Stimmen

Wie man Datensätze filtert, die nach mehr als einem Kriterium in der Pivot-Tabelle gefiltert werden - Laravel Eloquent Collections

Ich bin gerade dabei, eine persönliche Webseite für Buchempfehlungen zu überarbeiten. Ich möchte Bücher nach mehr als einem Kriterium filtern.

Zum Beispiel möchte ich alle Bücher anzeigen, die SOWOHL Philosophie ALS AUCH Science-Fiction sind. Ein Beispiel dafür ist Peter Watts' Blindsight.

Derzeit kann ich nur nach einem Kriterium filtern:

Ich habe eine Pivot-Tabelle für

Modell Bücher

public function genres()
{
    return $this->belongsToMany('App\Genre', 'bookgenres', 'book_id', 'genre_id');
}

Modell Genre:

public function books()
{
    return $this->belongsToMany('App\Book', 'bookgenres', 'genre_id', 'book_id');
}

Das Beispiel der Pivot-Tabelle bookgenres: id,book_id, genre_id

1 - 23 - 4

2 - 23 - 5

3 - 24 - 4

In einfachen Worten: Das Buch #23 ist sowohl SF (#4) als auch Philosophie (#5), während das Buch #24 nur SF (#4) ist.

Mit diesen Informationen frage ich einfach ab

$genre = 4;
$books = Genre::find($genre)->books()->get();

und verwende eine standardmäßige @foreach-Schleife, um die Bücher aufzulisten


Zu erledigen: filtere die Sammlung nach zwei Genres, nicht nur einem.

Vielen Dank im Voraus!

3voto

lukasgeiter Punkte 145479

Sie können Beziehungen abfragen mit whereHas

Hier verwende ich den Namen des Genres. Wenn Sie möchten, können Sie auch die ID verwenden. Ändern Sie einfach den Spaltennamen und natürlich das Array.

$genres = array('philosophy', 'science-fiction');
$books = Book::whereHas('genres', function($query) use ($genres){
    $query->whereIn('name', $genres);
})->get();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X