Laravel 5.6分页失效:Method Illuminate\Database\Eloquent\Collection::links不存在
解决:Method Illuminate\Database\Eloquent\Collection::links does not exist 错误
兄弟,太懂这种照着教程写却持续报错的憋屈感了!咱们直接戳破问题根源,给你靠谱的解决方案:
问题到底出在哪?
你把查询方法的组合逻辑搞反了——take(12)会直接触发数据库查询并返回一个普通Eloquent集合(Collection),而你紧接着调用的paginate(5)其实是在这个集合上执行的(虽然Collection也有paginate方法,但这里的链式调用逻辑完全不对),最终传到视图的$products并不是分页器实例,自然没有links()方法。
更关键的是:take()和paginate()在查询构建器上不能这么链式用,因为paginate()会自动生成分页所需的LIMIT/OFFSET语句,take(12)的限制会被分页逻辑直接覆盖,根本达不到你想要的「先取12条随机数据再分页」的效果。
正确写法分两种情况
情况1:先取12条随机产品,再把这12条分页(每页5条)
分两步处理,先拿集合再分页:
// 第一步:从数据库获取12条随机产品的集合 $randomProducts = Product::inRandomOrder()->take(12)->get(); // 第二步:对已获取的集合做分页处理 $products = $randomProducts->paginate(5); return view('shop')->with([ 'products' => $products, 'categories' => $categories, 'categoryName' => $categoryName, ]);
情况2:对所有产品随机排序后分页(每页5条)
直接去掉多余的take(12)即可:
$products = Product::inRandomOrder()->paginate(5); return view('shop')->with([ 'products' => $products, 'categories' => $categories, 'categoryName' => $categoryName, ]);
快速验证方法
修改完代码后,可以在视图里先打印$products的类型确认:
{{ get_class($products) }}
如果输出是Illuminate\Pagination\Paginator或Illuminate\Pagination\LengthAwarePaginator,说明分页器实例已正确生成,再调用{{ $products->links() }}就不会报错了。
内容的提问来源于stack exchange,提问作者Ginodavecte
相关产品推荐
相关产品推荐

