Laravel Eager Загрузка: сортировка по столбцу отношений - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть две таблицы 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

Я хотел бы выбрать все сообщения, но отсортировать по авторуname, Достижим ли следующий вывод с помощью Eager Loading 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();

1 Ответ

0 голосов
/ 30 ноября 2018

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

$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;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...