Collections 是数组周围强大且流畅的包装器,提供了数十个可链式调用的方法来优雅地处理数据(map、filter、reduce、groupBy 等)。Eloquent 查询结果作为 Collections 返回,所以您会经常使用它们。
$collection = collect([1, 2, 3, 4, 5]);
$result = $collection
->filter(fn($n) => $n % 2 === 0) // [2, 4]
->map(fn($n) => $n * 10) // [20, 40]
->values(); // re-index
$collection->sum(); // 15
$collection->avg(); // 3
$collection->max(); // 5
Collection 包装一个数组并提供流畅、可链式调用的 API — 比手动数组函数更具表现力,并且可链式调用以实现干净的数据管道。
$users = User::all(); // returns a Collection of User models
$users->where('active', true) // filter
->sortBy('name')
->map(fn($u) => $u->name)
->take(10);
$users->pluck('email'); // extract one field → a collection of emails
$users->groupBy('role'); // group by a field → role => [users]
$users->keyBy('id'); // index by id
因为 Eloquent 返回 Collections,您可以在 PHP 中优雅地转换查询结果 — 但对于大型数据集,应该优先使用数据库查询,而不是获取所有内容并在 PHP 中过滤。
map, filter, reduce, each transform/iterate
pluck, keyBy, groupBy, partition restructure
sum, avg, min, max, count aggregate
sort, sortBy, reverse, unique order/dedup
first, last, take, skip, chunk slice
contains, every, some, where query
implode, flatten, collapse, merge combine
Collections 是一个重要的、无处不在的 Laravel 功能 — 它们使数组和数据的处理变得优雅且富有表现力,并且由于 Eloquent 查询结果是 Collections,在处理数据库数据时您会经常使用它们,使其成为日常的、必需的知识。
核心价值在于流畅的、可链式调用的 API:与其使用冗长的、命令式数组操作,Collections 让您将数据转换(过滤、映射、分组、聚合、排序)表达为可读的、可组合的方法链 — 这是一个巨大的生产力和可读性优势,体现了 Laravel 的优雅风格。
理解丰富的方法集(map/filter/reduce 用于转换,pluck/groupBy/keyBy 用于重构,聚合和排序方法)可以让您干净地处理数据,这对于有效处理 Eloquent 结果是必要的(Eloquent 返回您随后转换的 Collections)。
了解 Collections — 它们的流畅 API、可用方法的广度以及 Eloquent 使用它们的事实 — 对于高效的 Laravel 开发至关重要,因为数据操作是常态,Collections 是 Laravel 使其优雅的方式。(一个重要的实际警告:对于过滤/排序大型数据集,应该优先在 database query 中执行工作,而不是将所有记录获取到 Collection 中并在 PHP 中处理 — Collections 用于内存中的数据操作,不是高效查询的替代品。)掌握 Collections 是惯用、高效 Laravel 代码的标志。