2016-12-15 5 views
5

Этот вопрос связан с: Laravel (5.3) Eloquent - Relationship issue, пожалуйста, зайдите на этот URL для получения дополнительной информации.Laravel orderBy whereHas

Я закончил с следующим сценарием:

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

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

return $similiarSeries->take(10); 

Что это делает: Он проверяет фильмы, который имеет по крайней мере 1 жанр сверху переменные и возвращают 10 фильмов (если есть).

Проблема заключается в том, что их фильмы возвращаются в хаотичном порядке, вместо этого я бы предпочел бы, чтобы они отображались, отдавая приоритет фильмам, которые являются: действием, драмой, романтикой, а затем возвращают эти фильмы только с двумя жанрами (например: драма, романтика или романтика, действие). а затем только 1 жанр.

Возможно ли это в laravel?

UPDATE

Это пример список фильмов и их жанров:

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 

Так что, если мы ищем фильмы, которые имеют по крайней мере один из [ «действие», «драма», «романтика» ],

Я ожидаю следующее возвратятся

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

Попробуйте привести еще один пример, пожалуйста. С именами реальных фильмов и именами жанров. Что у вас есть, и что вам нужно вернуть. –

+0

#ArturSubotkevic только что обновил вопрос. – Coder

+0

С 0 жанрами тоже? Что за? –

ответ

2

Хорошо, у вас.

По Laravel 5.2.41 вы можете использовать withCount() метод, как это:

$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); 

Это Заказ по жанрам подсчитывать (по убыванию).

+0

Я только что проверил это, есть проблема, это подсчитывает количество жанров, которые определенная серия не имеет в действительности того, что мне нужно. – Coder

+0

Подождите ... Итак, какой счет вам нужен? : D –

+0

Мне нужно его сортировать по жанрам, которые являются частью массива. – Coder

Смежные вопросы