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






Если вы просто хотите заказать небольшое количество элемента, вы можете пойти и заказать полученный коллекция с его функцией Сортировать по():
$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;
});
если вы маршрутизируете привязку модели и $ post является экземпляром модели Post, вы можете: $ post-> load (['author' => function ($ name) {$ name-> sortBy ('name', 'asc' }]);