gpt4 book ai didi

带有条件语句的 Laravel Eager Load

转载 作者:行者123 更新时间:2023-12-04 15:06:52 26 4
gpt4 key购买 nike

今天是个好日子
我是 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
]);
}
这该怎么做?

UPDATE


我找到了一种按赞数排序评论的方法,但如果每个评论中没有赞,我不知道如何通过“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);

...
}
如果评论中没有类似内容,现在如何通过“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);
从最初的评论复制

So if all comments have 0 likes then the newest one will appear first in list, same if comments have likes then they are also sorted first with likes count and then with created at.


一旦您订购了收藏品,那么在您循环新闻记录时,然后从相关记录中选择第一项

关于带有条件语句的 Laravel Eager Load,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65977213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com