cari

Rumah  >  Soal Jawab  >  teks badan

Pertanyaan Laravel: orderBy tidak berfungsi dengan groupBy (menggunakan jadual gabungan)

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粉316890884P粉316890884246 hari yang lalu316

membalas semua(1)saya akan balas

  • P粉546138344

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

    balas
    0
  • Batalbalas