У меня есть приложение чата, созданное с использованием Laravel. Модель чата имеет много сообщений. Я хочу присоединиться к соответствующим чатам с данными из самого последнего сообщения в каждом чате. До сих пор, это то, как это настроено
chats()->join('messages', function ($join) {
$join->on('messages.chat_id', '=', 'chats.id')
->on('messages.id', '=', DB::raw("(SELECT max(id) from messages WHERE messages.chat_id = chats.id)"));
})
Это работает хорошо, но я хотел бы иметь возможность выбирать по максимальному созданному или максимальному измененному. Если я переключу идентификатор на creat_at ('messages.created_at', '=', DB::raw("(SELECT max(id) from messages WHERE messages.chat_id = chats.id)"))
, это может сработать, но если две записи имеют одинаковую метку времени, это может привести к нежелательному поведению. Есть ли какой-нибудь способ получить всю строку при выборе max, чтобы я мог выбрать id?