Laravel之Collection::macro
我们model查询数据时,经常遇到需要多个分组条件的情况,如果我们想得到根据分组条件组合的kv数据,laravel集合自带keyBy方法对于这种情况处理起来较麻烦些,下面让我们通过macro方法扩展一个集合方法简化处理
// 在合适的地方如:AppServiceProvider扩展集合方法
// 该方法允许指定多个key作为集合的键
// 并且可以通过类似$col->get('k1.k2.k3')这种形式访问集合
Collection::macro('multiKeyBy', function (...$keys) {
return $this->keyBy(function ($c) use($keys) {
$tmp = [];
foreach ($keys as $k) {
$tmp[] = $c->{$k};
}
return implode('.', $tmp);
});
});
// 数据查询时快捷调用
$group = ['app_id', 'game_id'];
$data = Order::selectRaw('app_id, game_id, sum(money) as money')
->groupBy($group)->get()
->multiKeyBy(...$group);
dd($data->toArray());
本作品采用《CC 协议》,转载必须注明作者和本文链接
groupBy()
可以传入一个回调函数来处理key
值,不知道你想要的是不是这样的结果:结果: