是否可以使用orderBy对象的相关模型?也就是说,假设我有一个Blog Post模型,hasMany("Comments"); 我可以用它来获取一个集合
$posts = BlogPost::all();
Run Code Online (Sandbox Code Playgroud)
然后浏览每个帖子,并显示评论的每个帖子的最后编辑日期
foreach($posts as $post)
{
foreach($post->comments as $comment)
{
echo $comment->edited_date,"\n";
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让我设置回复评论的顺序?
Jar*_*zyk 14
这是正确的方法:
BlogPost::with(['comments' => function ($q) {
$q->orderBy('whatever');
}])->get();
Run Code Online (Sandbox Code Playgroud)
关系返回的对象是一个支持查询构建器功能的 Eloquent 实例,因此您可以在其上调用查询构建器方法。
foreach ($posts as $post) {
foreach ($post->comments()->orderBy('edited_date')->get() as $comment) {
echo $comment->edited_date,"\n";
}
}
Run Code Online (Sandbox Code Playgroud)
另外,请记住,当您发布foreach()这样的所有帖子时,Laravel 必须运行查询来选择每次迭代中帖子的评论,因此建议像Jarek Tkaczyk 的答案中看到的那样急切地加载评论。
您还可以为有序评论创建一个独立的函数,就像您在这个问题中看到的那样。
public function comments() {
return $this->hasMany('Comment')->orderBy('comments.edited_date');
}
Run Code Online (Sandbox Code Playgroud)
然后您可以像在原始代码中那样循环它们。
| 归档时间: |
|
| 查看次数: |
4747 次 |
| 最近记录: |