laravel

Примеры сортировки отношений столбцов в Laravel

В этой записи будут приведены примеры того, как использовать 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);
To top