В этой записи будут приведены примеры того, как использовать orderBy с полем отношения в приложении laravel.
Пример 1
Здесь будет использоваться метод with
для столбцу по столбцу отношения в laravel.
posts = Post::with(['author' => function ($q){
$q->orderBy('name');
}])
->get();
$posts = Post::with(['author' => function ($q){
$q->orderBy('name', 'DESC');
}])
->get();
Пример 2
В этом примере мы будем использовать методы коллекции sortBy()
и sortByDesc()
для сортировки по столбцу отношения в laravel.
$posts = Post::get()->sortBy(function($query){
return $query->auther->name;
})
->all();
$posts = Post::get()->sortByDesc(function($query){
return $query->auther->name;
})
->all();
Пример 3
В этом примере мы будем использовать join
и сортировку по отношениям столбцов в Laravel.
$posts = Post::select('*')
->join('authors', 'posts.author_id', '=', 'authors.id')
->orderBy('authors.name', 'ASC')
->paginate(10);
$posts = Post::select('*')
->join('authors', 'posts.author_id', '=', 'authors.id')
->orderBy('authors.name', 'DESC')
->paginate(10);
Пример 4: Сортировка по отношениям has-one/belongs-to
Вы также можете использовать в подзапросах методы orderBy()
и orderByDesc()
как показано ниже.
$posts = Post::select('*')
->orderBy(Author::select('name')
->whereColumn('authors.id', 'posts.author_id')
)
->paginate(10);
$posts = Post::select('*')
->orderByDesc(Author::select('name')
->whereColumn('authors.id', 'posts.author_id')
)
->paginate(10);
Пример 5: Сортировка по отношениям has-many
Пример использования сортировки в подзапросах для отношений has-many методы orderBy()
и orderByDesc()
как показано ниже.
$posts = Post::select('*')
->orderBy(Author::select('name')
->whereColumn('authors.id', 'posts.author_id')
->latest()
->take(1)
)
->paginate(10);
$posts = Post::select('*')
->orderByDesc(Author::select('name')
->whereColumn('authors.id', 'posts.author_id')
->latest()
->take(1)
)
->paginate(10);