Rumah > Soal Jawab > teks badan
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粉5461383442024-03-29 10:58:36
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();