QQ扫一扫联系
我们 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 = $model->groupBy($group) ->multiKeyBy(...$group); dd($data->toArray());