Вы должны заказать их по столбцу created_at
:
$chats = Chat::select('chats.*')
->join('chat_messages', 'chats.id', '=', 'chat_messages.chat_id')
->orderBy('chat_messages.created_at', 'desc')
->get();
Я проверил это с базой данных из 10 чатов и 100 сообщений, где последнее сообщение было создано после других, а последнее сообщение для чата с идентификатором № 9.
Поэтому, когда я выполняю приведенный выше код и извлекаю первую комнату чата, я получаю следующее:
App\Chat { #3401
id: 9,
created_at: "2019-04-30 17:12:34",
updated_at: "2019-04-30 17:12:34",
}