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本の作品(存在する場合)を返します。

問題は、ムービーが混沌とした順序で返されていることです。代わりに、アクション、ドラマ、ロマンスなどの映画を優先して表示して、2つのジャンルだけの映画を返すようにすると、ドラマ、ロマンス、ロマンス、アクションなど)。そして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

[OK]を、あなたが得ました。

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

これは、ジャンルは(DESC)カウント一致で注文します:

はLaravel 5.2.41の時点で、あなたはこのような withCount()メソッドを使用することができます。

+0

私はちょうどそれをチェックした、問題がある、これは特定のシリーズが実際に私が必要としていないジャンルの数を数えます。 – Coder

+0

待って...何が必要ですか? :D –

+0

与えられた配列の一部であるジャンルでソートする必要があります。 – Coder