Laravel 集合使用技巧
「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战」
PHP作为弱类型语言,数组非常简单好用,没有像Java、Go语言那么多的限制;而PHP的集合除了简单好用,相比数组支持更强大的功能。
集合
高阶集合方法
集合具有更高阶的可以链式调用的方法,例如 groupBy() , map() 等
下面的例子计算了一个订单中每组产品的价格。
dart
$offer = [ 'name' => '订单1', 'lines' => [ ['group' => 1, 'price' => 10], ['group' => 1, 'price' => 20], ['group' => 2, 'price' => 30], ['group' => 2, 'price' => 40], ['group' => 3, 'price' => 50], ['group' => 3, 'price' => 60] ] ]; $totalPerGroup = collect($offer->lines)->groupBy('group')->map(fn($group) => $group->sum('price'));不要在集合中使用 NULL 过滤
我们可以在 Eloquent 中使用 NULL 过滤,但是不能用 NULL 过滤 集合
需要换成空字符串过滤,字段中已经没有 "null"。
原理是全字符串的形式的过滤不能使用 NULL,因为会被格式化为 ["field is null", "=", true]
ini
// ORM 这样查询没问题 $products = Product::where('purchase_at is null')->get(); // 这将不会按预期返回,只会返回 0 条 $products = Product::all(); $unpurchase_products = $products->where('purchase_at is null')->count(); // 可以改成这样 $unpurchase_products = $products->where('purchase_at', '')->count();使用自定义的回调函数对集合分组
如果我们想对结果分组,且分组字段不对应数据库中的字段
我们可以提供一个回调函数来返回自定义的分组字段。
例如,通过用户的注册日分组,代码如下:
bash
$users = User::all()-