Pertanyaan Laravel: orderBy tidak berfungsi dengan groupBy (menggunakan jadual gabungan)
P粉316890884
P粉316890884 2024-03-28 16:08:45
0
1
313

Saya sedang membangunkan fungsi pemesejan asas dalam Laravel dan ingin memaparkan setiap pengguna yang menghantar mesej kepada pengguna yang sedang log masuk dan mesej terakhir diterima, masalahnya ialah "orderByDesc" tidak berfungsi dengan betul ia memaparkan mesej pertama dan bukannya yang terakhir.

Ini adalah pertanyaan yang saya tulis:

$receivedmessages = DB::table('messages')
    ->join('users', 'users.id', '=', 'messages.sender_id')
    ->select('messages.*', 'users.username')
    ->where('receiver_id', Auth::user()->id)
    ->orderByDesc('messages.created_at')
    ->groupBy('receiver_id')
    ->get();

Ada idea bagaimana untuk menyelesaikan masalah ini? Terima kasih

P粉316890884
P粉316890884

membalas semua(1)
P粉546138344

Alih keluar ->where('receiver_id', Auth::user()->id) syarat ini untuk mendapatkan hasil bagi setiap pengguna dan bukannya yang anda log masuk

Cara untuk mencapai perkara di atas adalah dengan mendapatkan Id maksimum daripada jadual dan gunakan Id ini dalam keadaan WHERE IN

$receivedmessages = DB::table('messages')
    ->join('users', 'users.id', '=', 'messages.sender_id')
    ->select('messages.*', 'users.username')
    ->whereRaw('messages.id IN (SELECT MAX(messages.id) FROM messages GROUP BY receiver_id, sender_id)')
    ->where('receiver_id', Auth::user()->id)
    ->orderByDesc('messages.created_at')
    ->get();
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan