带条件语句的Laravel Eager Load
大家好 我是拉威尔的新手,目前正在用它构建我的第一个简单新闻应用程序 我有一个简单的查询,它使用了laravel的渴望加载函数 但是在这个急切的加载函数中,我想根据一些条件获取某些注释 例如:带条件语句的Laravel Eager Load,laravel,eloquent,sql-order-by,laravel-relations,Laravel,Eloquent,Sql Order By,Laravel Relations,大家好 我是拉威尔的新手,目前正在用它构建我的第一个简单新闻应用程序 我有一个简单的查询,它使用了laravel的渴望加载函数 但是在这个急切的加载函数中,我想根据一些条件获取某些注释 例如: use App\News; ... public function home() { $news = News::with([ 'thumbnail', 'source', // link to real news
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')
然后按降序排列
public function home() {
$news = News::with([
'thumbnail',
'source',
'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”(最新的一个)将回退查询按顺序排列评论
提前感谢您当前的方法看起来很适合按喜欢次数对结果进行排序,如果没有喜欢,您仍然可以通过在列添加另一个带有创建的
的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个喜欢,那么最新的一个会首先出现在列表中,同样,如果评论有喜欢,那么它们也会首先按照喜欢计数排序,然后按照创建时间排序
一旦您对收藏进行了排序,然后在循环新闻记录时,从相关记录中选择第一个项目添加另一个在desc创建的订单,这样,如果所有评论都有0个喜欢,则最新的一个将首先出现在列表中,如果评论有喜欢,则使用created atYou Was right对它们进行排序,感谢您的指点,我必须放置两个查询orderBy(),一个是likes\u count,另一个是在$query->orderBy('likes\u count',DESC')->first()处创建的代码>$query->orderBy('created_at','DESC')->first()代码>我已经通过多次删除和恢复评论上的喜欢来测试它,并且它工作正常,顺便说一句,你打算回答我的问题吗?如果是的话,我会把你的答案标记为正确答案,否则我会再回答一遍,谢谢你,顺便问一下,我有一个简单的问题,把这些问题放在一起,然后把它们分成两行有什么区别吗?@ChristianDelvianto没有;没什么区别,在同一条线上做基本上叫做方法chaining@ChristianDelvianto我已经用First()更新了我的答案
将只为一条新闻返回一条评论,因此您需要加载所有评论,这些评论按照在和显示新闻时创建的类似计数排序,然后从排序的评论集合中选择第一条记录,cheers