Laravel 中分组数据并限制每个分组 bookCode 数量为 6 条
如何在 Laravel 中对数据进行分组,并确保每个分组中 bookCode
的数量不超过 6 条?
解决方案:
利用 Laravel 的集合方法 groupBy
和 map
,结合 PHP 的 slice
函数,可以高效地实现此功能。
以下代码片段展示了如何实现:
$books = $books->groupBy('author_id')
->map(function ($group) {
return $group->slice(0, 6);
});
代码解释:
$books->groupBy('author_id')
: 这部分代码根据 author_id
对 $books
集合进行分组。分组后的结果是一个新的集合,其键为 author_id
,值为每个 author_id
对应的 book
模型集合。
->map(function ($group) { ... })
: map
方法对分组后的每个集合应用一个匿名函数。$group
变量代表每个 author_id
对应的 book
模型集合。
return $group->slice(0, 6);
: slice(0, 6)
方法从集合的开头截取 6 条记录。如果一个分组中的 bookCode
少于 6 条,则返回该分组的所有记录;如果多于 6 条,则只返回前 6 条。
最终,$books
变量将包含一个新的集合,其中每个分组最多包含 6 条 bookCode
记录。