Laravel 10搜索功能报错:Method Illuminate\Database\Eloquent\Collection::links不存在
修复Laravel 10搜索分页的“links does not exist”错误
问题根源
当你在视图中调用links()方法时,Laravel要求传入的是分页器实例(如LengthAwarePaginator),但你的搜索逻辑返回的是普通的Eloquent Collection集合——这类集合没有links()方法,因此触发报错。
修复步骤
1. 确保搜索分支保持分页查询
检查PackingController中的搜索逻辑,不能用get()获取全部结果,必须继续使用paginate()方法维持分页器实例。示例代码如下:
public function index(Request $request) { // 初始化查询构造器 $query = Packing::query(); // 处理搜索条件 if ($request->filled('search')) { $searchTerm = $request->input('search'); $query->where('your_column', 'like', "%{$searchTerm}%") // 可添加更多搜索字段 ->orWhere('another_column', 'like', "%{$searchTerm}%"); } // 执行分页查询,而非get() $packings = $query->paginate(10); // 10为每页显示数量,按需修改 return view('packings.index', compact('packings')); }
2. 确认视图分页代码正确
保持视图中的分页链接代码不变,确保调用的是分页器的links()方法:
<div class="pagination-container"> {{ $packings->links() }} </div>
3. 携带搜索参数到分页链接(可选但关键)
默认分页链接不会携带搜索关键词,切换页码时会丢失搜索条件。可以通过appends()方法传递参数:
在控制器中修改分页代码:
$packings = $query->paginate(10)->appends($request->only('search'));
或者直接在视图中处理:
{{ $packings->appends(request()->query())->links() }}
常见错误排查
- 检查搜索分支是否误用了
get()、all()或collect(),这些方法会返回普通集合而非分页器。 - 可在控制器中用
dd($packings)查看变量类型,正确类型应为Illuminate\Pagination\LengthAwarePaginator。
内容的提问来源于stack exchange,提问作者Eyowww
相关产品推荐
相关产品推荐

