2016-12-15 1 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); 

를 그것이 무엇을하는 것입니다 : 그것은 변수 위에서 적어도 한 장르를 가지고 영화를 확인하고 (있는 경우) (10) 영화를 반환합니다.

문제는 영화가 혼란스런 순서로 반환된다는 것입니다. 대신 액션, 드라마, 로맨스 등의 영화를 우선 순위로 표시하고, 2 개의 장르 만 가진 영화를 반환하면 좋을 것입니다. 드라마, 로맨스 또는 로맨스, 액션). 그리고 나서 단 1 개의 장르.

laravel에서도 가능합니까? '로맨스', 우리는 [ '행동', '드라마'중 하나 이상을 가지고 영화를 검색 그렇다면

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 

:

UPDATE

이 영화와 그 장르의 예 목록입니다 ],

내가 다음이 반환 될 것으로 기대하고있다 :

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

이 좋아, 당신을 얻었다.

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

이 장르 (내림차순) 계산 일치로 주문합니다

는 Laravel 5.2.41부터는이 같은 withCount() 방법을 사용할 수 있습니다.

+0

방금 ​​확인했는데 문제가 있습니다.이 시리즈는 실제로 필요하지 않은 장르의 수를 계산합니다. – Coder

+0

기다려 ... 그래서 당신은 무엇이 필요합니까? : D –

+0

주어진 배열의 일부인 장르별로 정렬해야합니다. – Coder

관련 문제