Как изменить код для сортировки сообщений сначала по полю 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