Laravel5:如何在传至Blade视图前实现分页数据的pluck处理
解决Laravel分页数据同时使用pluck()的问题
这问题我之前也碰到过,Laravel里paginate()返回的不是普通的Collection集合,而是LengthAwarePaginator实例——它包含了分页相关的元数据(总条数、当前页码、每页数量等),真实的数据集合存在它的items属性里。所以直接collect($merchants)不会生效,因为你只是把整个分页对象转成了集合,而不是操作里面的实际数据。
要同时保留分页功能和提取指定字段,你可以这么做:
- 先正常获取分页实例:
$merchants = Merchant::selectRaw($query) ->with(...) ->whereHas(...) ->where(...) ->paginate(10);
- 提取分页对象里的数据集,用
pluck()处理后,再赋值回分页对象:
// 比如你要提取id和name字段,格式为pluck('显示字段', '键字段') $processedItems = $merchants->getCollection()->pluck('name', 'id'); // 把处理后的集合重新设置给分页对象 $merchants->setCollection($processedItems);
这样处理后,$merchants依然是一个完整的分页对象,保留了所有分页相关的功能(比如在Blade里用{{ $merchants->links() }}渲染分页链接),但里面的每条数据已经是你通过pluck()提取后的键值对了。
另外补充一点:如果你只是需要在视图里使用特定字段,其实也可以在视图里直接对每个item取值,但如果是需要统一处理成键值对集合(比如用于下拉框选项),上面的方法就非常合适。
内容的提问来源于stack exchange,提问作者Dong3000
相关产品推荐
相关产品推荐

