Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memesan Keputusan Laravel mengikut Kiraan Perhubungan?

Bagaimana untuk Memesan Keputusan Laravel mengikut Kiraan Perhubungan?

Barbara Streisand
Barbara Streisandasal
2024-11-12 21:12:02548semak imbas

How to Order Laravel Results by Relationship Count?

Laravel: Keputusan Pesanan mengikut Kiraan Perhubungan

Memesan keputusan pangkalan data mengikut kiraan rekod berkaitan dalam perhubungan banyak-ke-banyak boleh menjadi tugas yang rumit. Mari kita terokai penyelesaian untuk senario sedemikian.

Pertimbangkan skema pangkalan data berikut:

hackathons
    id
    name
    ...

hackathon_user
    hackathon_id
    user_id

users
    id
    name

Untuk mendapatkan hackathon paling popular berdasarkan bilangan peserta, kita perlu menggunakan pertanyaan penyertaan dan kumpulkan keputusan mengikut ID hackathon, mengira bilangan peserta untuk setiap hackathon. Ini boleh dicapai menggunakan pertanyaan berikut:

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

Pertanyaan ini akan mengambil hackathon yang dipesan mengikut kiraan peserta, dengan hackathon paling popular disenaraikan dahulu.

Sebagai alternatif, jika menggunakan Laravel's Eloquent ORM, anda boleh menggunakan pendekatan berikut:

Hackathon::withCount('participants')->orderBy('participants_count', 'desc')->get();

Pendekatan ini lebih mudah dan mudah, tetapi ia bergantung pada kaedah withCount() Eloquent, yang mungkin tidak tersedia dalam versi lama Laravel.

Atas ialah kandungan terperinci Bagaimana untuk Memesan Keputusan Laravel mengikut Kiraan Perhubungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn