2016-12-15 18 views
5

To pytanie jest związane z: Laravel (5.3) Eloquent - Relationship issue, proszę przejść do tego adresu URL, aby uzyskać więcej informacji.Zamówienie LaravelBy whereHas

skończyło się następujący scenariusz:

$genres = ['action', 'drama', 'romance']; 

$similiarSeries = TheSeries::whereHas('TheGenres', function($q) use($genres) { 
     $q->whereIn('genre', $genres); 
}, '>=', 1); 

return $similiarSeries->take(10); 

Co robi jest: Sprawdza filmów, który ma co najmniej 1 gatunek z góry zmiennej i zwraca 10 filmów (jeśli istnieje).

Problem polega na tym, że filmy są zwracane w chaotycznej kolejności, zamiast tego wolałbym, żeby były wyświetlane, dając pierwszeństwo filmom, które są: działaniem, dramatem, romantycznością, a następnie zwracają te filmy tylko z 2 gatunkami (jak: dramat, romans lub romans, akcja). a następnie tylko 1 gatunek.

Czy to możliwe w wersji laravel?

UPDATE

Jest to lista przykładów filmów i ich gatunków:

Zootopia: Action, Animation, Drama 
Toy Story: Action, Drama, Romance 
Kung Fu Panda: Action, Animation, Fantasy 
Avatar: Action, Drama, Romance 
Titanic: Action, Drama, Romance 
Avengers: Fantasy, Drama, Fiction 
Batman: Adventure 

Jeśli więc szukać filmów, które mają co najmniej jedną [ „akcja”, „dramat”, „romans” ]

oczekuję następujące zostać zwrócone:

Toy Story (Action, Drama, Romance) (3) 
Avatar (Action, Drama, Romance) (3) 
Titanic (Action, Drama, Romance) (3) 
Zootopia (Action, Drama) (2) 
Kung Fu Panda (Action) (1) 
Avengers (Drama) (1) 
Batman (0) 
+0

Spróbuj podać inny przykład, proszę. Z prawdziwymi nazwami filmów i nazwami gatunków. Co masz i czego potrzebujesz, aby zostać zwróconym. –

+0

#ArturSubotkevic właśnie zaktualizował pytanie. – Coder

+0

Z 0 gatunkami też? Co? –

Odpowiedz

2

Ok, mam ciebie.

Od laravel 5.2.41 można użyć withCount() metody takie jak to:

$similiarSeries = TheSeries::whereHas('TheGenres', function($q) use($genres) { 
    $q->whereIn('genre', $genres); 
})->withCount(['TheGenres' => function ($query) use ($genres) { 
    $query->whereIn('genre', $genres); 
}])->orderBy('TheGenres_count', 'desc'); 

return $similiarSeries->take(10); 

ten nakaże przez dopasowane gatunki liczyć (mal).

+0

Po prostu to sprawdziłem, jest problem, to zlicza liczbę gatunków, których konkretna seria nie ma w rzeczywistości tego, czego potrzebuję. – Coder

+0

Czekaj ... Więc ile potrzebujesz? : D –

+0

Potrzebuję go do sortowania według gatunków, które są częścią danej tablicy. – Coder