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

В Laravel для сортировки записей по связанной модели можно использовать метод orderBy вместе с именем поля из связанной модели.

Допустим, у нас есть модель Post, которая имеет отношение один-ко-многим с моделью Comment, где каждый пост может иметь несколько комментариев. Мы хотим отсортировать посты по количеству комментариев.

Сначала определим отношение между моделями Post и Comment в модели Post с помощью метода hasMany:

class Post extends Model
{
    public function comments()
    {
        return $this->hasMany(Comment::class);
    }
}

Теперь мы можем использовать связанную модель Comment в методе orderBy для сортировки записей по количеству комментариев. Например, если мы хотим сортировать записи постов в порядке убывания количества комментариев, мы можем использовать следующий код:

$posts = Post::orderByDesc(Comment::count('id'))->get();

Здесь мы использовали метод orderByDesc для сортировки по убыванию количества комментариев, а метод count с аргументом 'id' для подсчета количества комментариев для каждого поста. Затем мы используем метод get для получения отсортированного списка постов.

Таким образом, мы можем легко сортировать записи по связанной модели в Laravel, используя метод orderBy и имя поля из связанной модели.