如何解决带有条件语句的 Laravel Eager Load
大家好
我是 Laravel 的新手,目前正在用它构建我的第一个简单的新闻应用
我有一个简单的查询,使用 laravel 的预先加载功能 但是在这个急切加载功能中,我想根据某些条件获取某些评论
示例:
use App\News;
...
public function home() {
$news = News::with([
'thumbnail','source',// link to real news source
'comments' => function ($query) {
// fetch a comment where likes > 0,otherwise,get latest comment
// *get only one*
}
])->paginate(5);
return response()->json([
'news' => $news
]);
}
如何做到这一点?
更新
我找到了一种按赞数排序评论的方法,但如果每个评论中没有赞,我不知道如何按“created_at”(获取最新评论)排序
我需要使用 withCount('likes')
包含“likes_count”
然后按降序排列
public function home() {
$news = News::with([
'thumbnail','comments' => function ($query) {
$query->withCount('likes');
$query->orderBy('likes_count','DESC')->first();
// return the first comment that has likes or most liked comment
}
])->paginate(5);
...
}
如果评论中没有赞,现在如何将回退查询按“created_at”(最新的)排序?
提前致谢
解决方法
您当前的方法看起来很适合按喜欢计数对结果进行排序,如果没有喜欢,您仍然可以通过添加另一个带有 created_at
列的 order by 子句获得最新记录
$news = News::with([
'thumbnail','source','comments' => function ($query) {
$query->withCount('likes');
$query->orderBy('likes_count','DESC')
->orderBy('created_at','DESC');
}
])->paginate(5);
从最初的评论复制
因此,如果所有评论都有 0 个赞,则最新的评论将首先出现在列表中,同样,如果评论有赞,则它们也首先按赞数排序,然后按创建时间排序。
一旦您订购了收藏,然后在循环新闻记录时从相关记录中选择第一项
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。