我有两个表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();
答案 0 :(得分:0)
如果您只想订购少量元素,则可以使用其collection函数订购所得的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;
});