我需要一个Laravel查询,它返回最近创建的各种site_id
行的行。目前,我有这个问题:
Score::whereIn('site_id', $sites)->where('type', 2)->select('score')->get();
但它会返回网站的所有分数,其中type = 2。
目前,$sites
数组仅包含1,2
,因此它将排除3和4的site_ids。
数据库结构:
我查询返回的结果将是以下行:
ID:1,2。 - 如同,它们是阵列中最近创建的ID行。
更新
如果我使用:
Score::whereIn('site_id', $sites)->where('type', 2)
->select('score')
->groupBy('site_id')
->get();
一个groupBy
方法,它返回我想要的两个分数,但我不确定为什么它会返回它们?我认为它只会按site_id分组所有网站的分数?
感谢您的帮助。
答案 0 :(得分:0)
我听起来像是你需要一个orderBy(“created_at”)链接到你雄辩的查询的结尾。
答案 1 :(得分:0)
您需要的是:https://softonsofa.com/tweaking-eloquent-relations-how-to-get-latest-related-model/
有了这个,你可以轻松地做到这一点:
$sites = Site::with('latestScore')->find($siteIds); // Collection
// now for each site:
$site->latestScore // what you wanted
但是,如果您想要一组分数而不是通过site
访问它们,那么请使用收集方法:
$sites = Site::with('latestScore')->find($siteIds); // Collection
$scores = $sites->pluck('latestScore') // get nested elements from collection
->filter() // filter out null items