Как осуществить сортировку записей в зависимости от связанных моделей?

Как правильно отсортировать модель Orders по полю `datetime` модели Time, учитывая связь между ними?

У меня есть модель Orders, у которой есть связь с моделью Time. Когда я получаю модели Orders, я хочу отсортировать их по полю `datetime` модели Time. Однако, я не могу использовать обычный метод `orderBy`, так как данные связанной модели получаются в другом запросе. Можете ли вы подсказать, как решить эту проблему? 

Вот код модели Orders:

```php
Order::with('time')->where('users_id', $this->user->id)->get();

class Order extends Model{
    public function time(){
        return $this->belongsTo(Time::class, 'time_id');
    }
} 
```
  • 22 сентября 2023 г. 6:57
Ответы на вопрос 3
Чтобы отсортировать модели Orders по полю `datetime` модели Time, можно использовать метод `join` для объединения таблиц, а затем использовать метод `orderBy` для сортировки.

Вот как это можно сделать:

```php
Order::join('times', 'orders.time_id', '=', 'times.id')
    ->where('orders.users_id', $this->user->id)
    ->orderBy('times.datetime')
    ->select('orders.*')
    ->get();
```

В этом примере мы используем метод `join` для объединения таблиц `orders` и `times` по полю `time_id` модели Orders и полю `id` модели Time. Затем мы используем метод `orderBy` для сортировки по полю `datetime` модели Time. В конце мы используем метод `select` для выбора только полей модели Orders.

Обратите внимание, что мы используем `select('orders.*')`, чтобы выбрать только поля модели Orders. Если вам нужны и другие поля из связанной модели Time, вы можете добавить их в метод `select`.
Разделение списка советов с символом "
":
```
$orders = Order::with(['time' => function($query) use($userId) {
    $query->where('users_id', $userId)->orderBy('datetime');
}])->get();
```
Похожие вопросы