多対多の関係における関連レコードの数によってデータベースの結果を並べ替えるのは、複雑なタスクになる可能性があります。このようなシナリオの解決策を検討してみましょう。
次のデータベース スキーマを考えてみましょう:
hackathons id name ... hackathon_user hackathon_id user_id users id name
参加者の数に基づいて最も人気のあるハッカソンを取得するには、結合クエリを使用する必要があります。そして結果をハッカソン ID ごとにグループ化し、各ハッカソンの参加者数をカウントします。これは、次のクエリを使用して実現できます。
$hackathons = DB::table('hackathons') ->join('hackathon_user', 'hackathon_user.hackathon_id', '=', 'hackathons.id') ->groupBy('hackathon_user.hackathon_id') ->select('hackathons.id', 'hackathons.name', DB::raw('COUNT(*) as participant_count')) ->orderBy('participant_count', 'desc') ->get();
このクエリは、参加者数の順に並べられたハッカソンを取得します。最も人気のあるハッカソンが最初にリストされます。
あるいは、Laravel の Eloquent を使用している場合は、 ORM の場合は、次のアプローチを使用できます:
Hackathon::withCount('participants')->orderBy('participants_count', 'desc')->get();
このアプローチはより便利で簡単です。ただし、Eloquent の withCount() メソッドに依存しているため、Laravel の古いバージョンでは利用できない可能性があります。
以上がLaravel の結果を関係数で並べ替えるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。