Laravel分页问题:Axios请求下点击next_page_url无法获取第二页结果
你遇到的核心问题是分页请求丢失了原有的搜索参数(searchBy和searchValue),导致后端无法匹配查询条件,返回了空的请求参数而非第二页数据。下面是具体的解决方案:
1. 让分页链接携带所有查询参数
Laravel的paginate()方法默认会尝试保留当前请求的查询参数,但有时候需要显式指定要附加的参数。你可以通过appends()方法把当前请求的所有查询参数追加到分页链接中,这样生成的next_page_url就会包含searchBy、searchValue和page参数了:
public function search(Request $request){ $requestQuery = $request->query(); //获取所有查询参数 $searchBy = $request->searchBy; $searchValue = $request->searchValue; // 修复条件判断:检查参数是否存在且有效 if(isset($searchBy) && $searchBy === 'product_id' && !empty($searchValue)) { $product = Product::where("product_id", 'like', "%{$searchValue}%") ->paginate(5) ->appends($requestQuery); // 追加所有查询参数到分页链接 return response($product); } else { return $requestQuery; } }
2. 修复条件判断的逻辑漏洞
你原来的条件$searchValue == true存在隐患:当searchValue是非空字符串时,PHP会自动将其转为布尔值true,但如果参数缺失(比如分页请求时),$searchValue会是null,此时条件不成立。改成isset($searchBy) && $searchBy === 'product_id' && !empty($searchValue)可以更严谨地检查参数是否存在且有效,避免因为参数缺失进入else分支。
3. 验证分页链接是否正确
修改后,生成的next_page_url应该变成类似这样的格式:http://sprint/search?searchBy=product_id&searchValue=sprint-10&page=2
这样点击分页链接时,后端就能获取到完整的搜索参数,正确执行第二页的查询。
补充说明
如果你的前端是通过Axios请求分页链接,确保直接使用后端返回的next_page_url即可,不需要手动拼接参数,这样就能保证请求参数的完整性。
内容的提问来源于stack exchange,提问作者Mohamed Irshath

