Laravel orderBy whereHas

Esta pregunta está relacionada con: Laravel (5.3) Eloquent: problema de relación , acceda a esta url para obtener más información.

Terminé con el siguiente script:

$genres = ['action', 'dtwig', 'romance']; $similiarSeries = TheSeries::whereHas('TheGenres', function($q) use($genres) { $q->whereIn('genre', $genres); }, '>=', 1); return $similiarSeries->take(10); 

Lo que hace es: busca películas que tengan al menos 1 género de la variable anterior y devuelve 10 películas (si existen).

El problema es que las películas se devuelven en un orden caótico, en cambio prefiero que se muestren dando prioridad a las películas que son: acción, dtwig, romance y luego devuelven esas películas con solo 2 géneros (como: dtwig, romance o romance, acción). y luego solo 1 género

¿Es esto posible en laravel?

ACTUALIZAR

Esta es una lista de ejemplos de películas y sus géneros:

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

Entonces, si buscamos películas que tengan al menos uno de [‘action’, ‘dtwig’, ‘romance’],

Estoy esperando que se devuelva lo siguiente:

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

Ok, te tengo

A partir de Laravel 5.2.41, puede usar el método withCount() esta manera:

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

Esto ordenará por recuentos de géneros coincidentes (desc).