如何在Laravel分页结果中追加查询总条数?
解决Laravel分页结果追加总条数的问题
嘿,我来帮你捋清楚这个问题!你想在分页结果里带上查询的总条数,但你用的append()方法其实不是干这个的——它是用来给分页链接追加查询参数的,比如给每页的URL加?filter=active这种,不是用来往返回的数据里加字段的。
其实Laravel的paginate()返回的LengthAwarePaginator对象本身就已经包含总条数了,如果你直接返回这个实例,比如在API接口里返回return $query;,它转成JSON后会自动包含这些字段:
{ "current_page": 1, "data": [...], "first_page_url": "http://example.com?page=1", "from": 1, "last_page": 4, "last_page_url": "http://example.com?page=4", "links": [...], "next_page_url": "http://example.com?page=2", "path": "http://example.com", "per_page": 5, "prev_page_url": null, "to": 5, "total": 20 // 这就是你要的总条数! }
如果你想把总条数单独拎出来,或者自定义返回的结构,那可以自己组装响应数组:
// 执行分页查询 $pagination = Model::paginate(5); // 组装自定义响应 $response = [ 'list' => $pagination->items(), // 当前页的数据列表 'total' => $pagination->total(), // 整体总条数 'per_page' => $pagination->perPage(), // 每页条数 'current_page' => $pagination->currentPage(), // 当前页码 'last_page' => $pagination->lastPage() // 最后一页页码 ]; // 返回JSON响应 return response()->json($response);
要是你非得把总条数直接追加到分页实例的属性里(虽然有点冗余,因为total已经存在了),可以用addAttributes()方法:
$query = Model::paginate(5); // 给分页实例添加额外属性 $query->addAttributes(['total_count' => $query->total()]); return $query;
这样返回的JSON里就会多一个total_count字段,和原本的total值一样。
总结一下:Laravel分页本身就自带总条数,如果你需要自定义返回结构,自己组装数组是最灵活的方式~
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

