Настройка:
Я пытаюсь реализовать довольно стандартный сценарий использования для получения всех разговоров, частью которых является пользователь, и возврата только последнего сообщения от каждогоразговор. Я хотел бы сделать это таким образом, чтобы я мог использовать paginator в laravel.
Но группа по команде, похоже, игнорирует порядок подзапроса! (независимо от того, является ли сортировка ASC или DESC, результаты одинаковы).
------------------------------------------------------------------------------
id body user_id recipient_id conversation_id created_at
1 <p>test</p> 1 3 -1-3- 2019-10-06 20:00:00
2 <p>test</p> 1 3 -1-3- 2019-10-06 20:10:00
3 <p>test</p> 3 1 -1-3- 2019-10-06 20:20:00
4 <p>test</p> 2 1 -1-2- 2019-10-06 20:00:00
5 <p>test</p> 1 2 -1-2- 2019-10-06 20:10:00
6 <p>test</p> 1 2 -1-2- 2019-10-06 20:20:00
------------------------------------------------------------------------------
ПРИМЕЧАНИЕ. Я не беспокоюсь об условиях where для фильтрации данных пользователем. * Попытки:
$conversations = Message::fromSub(function ($query) {
$query->from('messages')
->orderBy('conversation_id')
->orderBy('created_at', 'DESC');
}, 'm')->groupBy('conversation_id')->get();
$conversations = DB::select(DB::raw("
SELECT *
FROM (
SELECT *
FROM messages
ORDER BY `created_at` DESC
) AS R
GROUP BY R.`conversation_id`
"));
Я в полном замешательстве: (