Laravel Collections 是封装数组的链式操作对象,支持从数组、Eloquent 结果等创建,提供 filter、map、groupBy、avg 等丰富方法,返回新实例,不可变且语义化强。
在 Laravel 中,Collections 是处理数组数据的利器,它把普通 PHP 数组包装成拥有丰富链式方法的对象,让过滤、映射、分组、排序等操作变得简洁又可读。
Collection 可以从数组、Eloquent 查询结果或其它可遍历结构创建。最常用的是 collect() 辅助函数:
collect([1, 2, 3, 4])->map(fn($n) => $n * 2); // [2, 4, 6, 8]User::where('active', 1)->get(),直接支持链式调用collect(request()->input('tags', []))
用 filter()、where()、first() 等方法替代手动 foreach:
$users->where('status', 'active')->where('score', '>', 80) —— 多字段精确匹配$users->filter(fn($user) => $user->posts->count() > 5) —— 支持闭包复杂逻辑$users->firstWhere('email', 'like', '%@gmail.com') —— 模糊查找首个匹配项用 map()、pluck()、groupBy() 快速重构数据形态:
$users->pluck('name', 'id') → 转为 [1 => 'Alice', 2 => 'Bob'] 关联数组$orders->map->total 或 $orders->map(fn($o) => $o->total + $o->tax) —— 提取或计算字段$logs->groupBy(fn($log) => $log->created_at->format('Y-m-d')) —— 按日期分组,返回多维 Collection高效统计与存在性检查,避免手写循环:
$products->avg('price')、$sales->sum('amount')、$items->countBy('category')
$users->contains('role', 'admin') 或 $users->every(fn($u) => $u->isVerified())
$posts->isNotEmpty() 比 count($posts) > 0 更语义化且安全(支持空值)Collection 方法大多返回新实例,不修改原数据,适合函数式风格。需要就地修改可用 transform();转回数组用 toArray(),转 J
SON 用 toJson()。基本上就这些,不复杂但容易忽略链式组合的力量。