Как изменить код для сортировки сообщений сначала по полю isread, а затем по дате создания? ```php public function index() { $alerts = Alert::where('id', '>', 0) ->where('user_id', 0) ->whereIn('type', ['5', '6']) ->select(\DB::raw('MAX(`id`) as id, MIN(`student_user_id`) as student_user_id, MIN(`info`) as info, MIN(`type`) as type, MIN(`name`) as name, MIN(`icon`) as `icon`, MAX(`created_at`) as `created_at`, (SELECT MAX(`created_at`) FROM msgs WHERE (msgs.user_id_from = alerts.student_user_id OR msgs.user_id_to = alerts.student_user_id) ) as last_message_time')) ->orderBy('isread', 'ASC') ->orderBy('last_message_time', 'DESC') ->groupBy('student_user_id') ->paginate(10); return view('alerts.index', ['title' => 'Чат']) ->with('alerts', $alerts);``` }
Для сортировки сообщений сначала по полю isread, а затем по дате создания, вы можете изменить код следующим образом: ```php public function index() { $alerts = Alert::where('id', '>', 0) ->where('user_id', 0) ->whereIn('type', ['5', '6']) ->select(\DB::raw('MAX(`id`) as id, MIN(`student_user_id`) as student_user_id, MIN(`info`) as info, MIN(`type`) as type, MIN(`name`) as name, MIN(`icon`) as `icon`, MAX(`created_at`) as `created_at`, (SELECT MAX(`created_at`) FROM msgs WHERE (msgs.user_id_from = alerts.student_user_id OR msgs.user_id_to = alerts.student_user_id) ) as last_message_time')) ->orderByRaw('-isread ASC, last_message_time DESC') ->groupBy('student_user_id') ->paginate(10); return view('alerts.index', ['title' => 'Чат']) ->with('alerts', $alerts); } ``` В данном коде используется функция `orderByRaw`, которая позволяет создать собственное выражение для сортировки. С помощью `-isread ASC` мы сортируем по возрастанию значения поля `isread`, а `last_message_time DESC` сортирует по убыванию значения поля `last_message_time`.
https://laravel.com/docs/10.x/queries#orderbyraw для PostgreSQL: раб - > orderByRaw('CASE isread WHEN 0 THEN 0 ELSE 1 END, last_message_time DESC')
В MySQL также можно сделать так (документацию не могу найти) если нужно сначала выбрать определенные id: ORDER BY FIELD(id, 100, 100500, 300), last_message_time