【发布时间】:2021-05-04 17:09:54
【问题描述】:
大家好
我是 Laravel 的新手,目前正在用它构建我的第一个简单的新闻应用程序
我有一个使用 laravel 的急切加载功能的简单查询 但是在这个急切的加载功能中,我想根据某些条件获取某些 cmets
例子:
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
]);
}
如何做到这一点?
更新
我找到了一种按点赞数排序 cmets 的方法,但如果每条评论中都没有点赞,我不知道如何按“created_at”(获取最新评论)对它们进行排序
我需要使用withCount('likes') 包含“likes_count”
然后按降序排列
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);
...
}
如果 cmets 中没有类似的,现在如何通过“created_at”(最新的)将后备查询用于订购 cmets?
提前致谢
【问题讨论】:
-
添加另一个订单 by created at desc 所以如果所有 cmets 有 0 个赞,那么最新的将出现在列表的第一位,如果 cmets 有赞,那么它们也使用 created at 排序
-
你说的对,谢谢指点
-
我必须输入 2 个查询 orderBy() 一个是 likes_count,另一个是 created_at
$query->orderBy('likes_count', 'DESC')->first();$query->orderBy('created_at', 'DESC')->first();我已经通过多次删除和恢复评论上的赞来测试它并且它正在工作并且btw,你会回答我的问题吗?如果你是,我会把你的答案标记为正确的,否则我会再回答一次,谢谢
标签: laravel eloquent sql-order-by laravel-relations