2015-08-10 3 views
0

Я пытаюсь получить последнее сообщение в MySQL, используя Laravel eloquent. У меня есть таблицыПоследнее сообщение в разговоре mysql Laravel eloquent

  • chats_users: магазины chat_id, user_id
  • chats_reply: магазины chat_id, sender_id, сообщение, created_at

Я попытался следующий код, но он не возвращает последнее сообщение ,

return $this->chat->join("chats_users", "chats_users.chat_id", "=", "chats.id") 
         ->join("chats_reply", "chats_reply.chat_id", "=", "chats.id") 
         ->where("chats_users.user_id", "=", $user_id) 
         ->take($limit) 
         ->skip($offset) 
         ->groupBy("chats_reply.chat_id") 
         ->get(); 

Я также попытался:

return \DB::select(\DB::raw("SELECT * FROM chats_reply msg inner join (select max(created_at) created_at, message from chats_reply group by chat_id) m2 on msg.created_at = m2.created_at INNER JOIN chats_users mst ON mst.chat_id=msg.chat_id WHERE mst.user_id=$user_id")); 
+0

Получите ожидаемые результаты при выполнении запроса самостоятельно? –

+0

Вы пробовали функцию orderBy() в красноречиве? – aldrin27

+0

Что делает raw render – Drew

ответ

1

Это на самом деле работает.

\DB::select(\DB::raw(
      "SELECT * FROM chats_reply msg 

      INNER JOIN ( 

        SELECT max(created_at) created_at FROM chats_reply GROUP BY chat_id ORDER BY created_at 

      ) m2 

      ON msg.created_at = m2.created_at 
      " 
    ) 
); 
Смежные вопросы