【问题标题】:"Skip" method in a Laravel CollectionLaravel 集合中的“跳过”方法
【发布时间】:2018-07-30 01:51:44
【问题描述】:
在查询生成器 (\Illuminate\Database\Query\Builder) 中,可以同时使用 skip($n) 和 take($n) 方法。
在集合 (\Illuminate\Support\Collection) 中,可以使用 take($n) 函数,但没有 skip($n) 函数。
为什么会这样,还有其他选择吗?
【问题讨论】:
标签:
php
laravel
eloquent
laravel-query-builder
laravel-collection
【解决方案1】:
skip($n) 方法确实不包含在 Collection 类中,但是有一个函数可以做到这一点:slice($n)。
QueryBuilder(取自文档):
$users = DB::table('users')->skip(10)->take(5)->get();
或者,您可以使用 limit 和 offset 方法:
$users = DB::table('users')
->offset(10)
->limit(5)
->get();
收藏:
collect([1, 2, 3, 4])->slice(2)->all(); //[3, 4]
QueryBuilder 类中的许多方法在Collection 类中不可用,反之亦然。但是它们都有类似的功能,例如QueryBuilder的where功能,您可以使用Collection的filter功能来达到类似的效果。
【解决方案2】:
forPage 方法返回一个新集合,其中包含将出现在给定页码上的项目。该方法接受页码作为其第一个参数,将每页显示的项目数作为其第二个参数:
$collection = collect([1, 2, 3, 4, 5, 6, 7, 8, 9]);
$chunk = $collection->forPage(2, 3);
$chunk->all();