Laravel - 从数组中获取最近创建的各种ID的行

时间:2016-03-12 12:43:57

标签: php arrays laravel eloquent laravel-5.2

我需要一个Laravel查询,它返回最近创建的各种site_id行的行。目前,我有这个问题:

Score::whereIn('site_id', $sites)->where('type', 2)->select('score')->get();

但它会返回网站的所有分数,其中type = 2。

目前,$sites数组仅包含1,2,因此它将排除3和4的site_ids。

数据库结构:

Database Structure

我查询返回的结果将是以下行:

ID:1,2。 - 如同,它们是阵列中最近创建的ID行。

更新

如果我使用:

Score::whereIn('site_id', $sites)->where('type', 2)
            ->select('score')
            ->groupBy('site_id')
            ->get();

一个groupBy方法,它返回我想要的两个分数,但我不确定为什么它会返回它们?我认为它只会按site_id分组所有网站的分数?

感谢您的帮助。

2 个答案:

答案 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