Laravel 10分页数据统计显示异常,请求技术协助
Laravel 10分页统计显示错误的修复方案
你遇到的分页统计显示错误,核心问题出在**LengthAwarePaginator的参数传递错误**,同时可能你的API接口没有正确处理分页请求,具体分析和修复如下:
错误原因拆解
- 总数据量参数错误:你用
count($json)作为总数据量传入分页器,但$json是API返回的当前页数据(如果API没分页就是全部13条),这会让分页器误判总数据量等于当前页数据量,或者直接拿到全量数据导致统计错误。 - API接口可能未生效分页:如果你的
/api/culinary接口没有根据page和per_page参数做分页处理,会直接返回全部13条数据,分页器拿到全量数据后自然显示"1 to 13"。
修复步骤
1. 确保API返回标准分页结构
如果你的API是Laravel编写的,接口必须返回Laravel自带的分页响应(包含总数据量、当前页等元数据),示例代码如下:
// API端的Culinary控制器index方法 public function index(Request $request) { $perPage = $request->query('per_page', 8); // 使用paginate()而不是get(),自动返回带分页元数据的响应 return Culinary::paginate($perPage); }
此时API返回的JSON结构会是这样:
{ "data": [/* 当前页的8条数据 */], "total": 13, "per_page": 8, "current_page": 1, "last_page": 2 }
2. 修正前端控制器的分页器初始化代码
解析API返回的分页元数据,正确传入LengthAwarePaginator的参数:
public function index(Request $request) { $client = new \GuzzleHttp\Client(); $perPage = $request->query('per_page') ?: 8; $page = $request->query('page') ?: 1; $url = "http://localhost/api/culinary?page=$page&per_page=$perPage"; $response = $client->request('GET', $url); $apiResponse = json_decode((string)$response->getBody(), true); // 正确初始化分页器:传入当前页数据、总数据量、每页条数、当前页码 $paginatedResult = new LengthAwarePaginator( $apiResponse['data'], // 当前页的数据列表 $apiResponse['total'], // 数据库中的总数据量(关键!) $apiResponse['per_page'], // 每页显示条数 $apiResponse['current_page'], // 当前页码 [ 'query' => $request->query(), // 保留查询字符串参数 ] ); // 设置分页链接的基础路径,和视图中的配置一致 $paginatedResult->withPath('/culinary'); $view_data = [ 'title' => 'Browse Culinary', 'data' => $paginatedResult, ]; return view('culinary.index', $view_data); }
3. 视图代码保持不变
你的视图分页代码是正确的,无需修改:
{{ $data->withQueryString()->withPath('/culinary')->links() }}
验证效果
修复后,第一页会显示「Showing 1 to 8 of 13 results」,第二页显示「Showing 9 to 13 of 13 results」,符合预期。
内容的提问来源于stack exchange,提问作者dapidmini
相关产品推荐
相关产品推荐

