技术学习 Laravel之Collection::macro

Laravel之Collection::macro

50
 

我们 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());


更新:2024-03-08 23:09:15 © 著作权归作者所有
QQ
微信