Laravel Eager Loading: сортировка по столбцу отношений

У меня есть две таблицы posts и authors, две таблицы имеют Отношения один ко многим

posts table
id    title    author_id
1     Post 1   1
2     Post 2   2
3     Post 3   1

authors table
id    name
1     A
2     B

Я хотел бы выбрать все сообщения, но отсортировать по имени автора, Достижим ли следующий результат с помощью нетерпеливой загрузки Laravel

[
  {
  "id": 1,
  "title": "Post 1",
  "author_id": 1,
    "author": {
    "id": 1,
    "name": "A"
    }
  },
  {
  "id": 3,
  "title": "Post 3",
  "author_id": 1,
    "author": {
    "id": 1,
    "name": "A"
    }
  },
  {
  "id": 2,
  "title": "Post 2",
  "author_id": 2,
    "author": {
    "id": 2,
    "name": "B"
    }
  }
]

Я пробовал следующее, но это не сработало:

Post::with(['author' => function($query){
    $query->orderBy('name', 'asc');
}])->get();

если вы маршрутизируете привязку модели и $ post является экземпляром модели Post, вы можете: $ post-> load (['author' => function ($ name) {$ name-> sortBy ('name', 'asc' }]);

Brad Goldsmith 30.11.2018 22:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
86
1

Ответы 1

Если вы просто хотите заказать небольшое количество элемента, вы можете пойти и заказать полученный коллекция с его функцией Сортировать по():

$posts = Post::with('author')
         ->get()
         ->sortBy(function ($post) {
             return $post->author->name;
         });

Теперь это не будет работать должным образом при разбивке на страницы результатов.

В таких случаях я бы сделал наоборот: сначала заказал авторов, а затем получил доступ к их сообщениям:

$authors = Author::with('posts')->orderBy('name')->get();

$posts = $authors->map(function ($author) {
    return $author->posts;
});

Другие вопросы по теме