1 回答
TA贡献1802条经验 获得超5个赞
首先,我会创建一个$stores数组的集合实例:
$stores = collect([]);
我更喜欢使用push()集合的api 添加项目:
$stores->push($store);
其次,集合实例不提供本机分页方式,因此您需要添加一个宏:
use Illuminate\Support\Collection;
use Illuminate\Pagination\Paginator;
use Illuminate\Pagination\LengthAwarePaginator;
...
if (!Collection::hasMacro('paginate')) {
Collection::macro('paginate', function ($perPage = 25, $page = null, $options = []) {
$options['path'] = $options['path'] ?? request()->path();
$page = $page ?: (Paginator::resolveCurrentPage() ?: 1);
return new LengthAwarePaginator(
$this->forPage($page, $perPage)->values(),
$this->count(),
$perPage,
$page,
$options
);
});
}
我个人添加了上面的宏,AppServiceProvider以便我可以在我的项目中的任何地方使用它。这应该位于app/Providers目录中。
要分页,您只需调用paginate()您刚刚创建的宏:
$stores->paginate(15);
如果你想设置当前页面或路径,你可以这样做:
$stores->paginate(15, 1, ['path' => 'your/custom/path']);
要排序,您需要做的就是使用所需的sortBy方法来实现您的结果。
根据文档,sortBy需要一个字符串:
$sorted = $collection->sortBy('price');
或者回调:
$sorted = $collection->sortBy(function ($product, $key) {
return count($product['colors']);
});
该方法的sortByDesc()工作方式与sortBy().
- 1 回答
- 0 关注
- 279 浏览
添加回答
举报