You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 5.6分页失效:Method Illuminate\Database\Eloquent\Collection::links不存在

兄弟,太懂这种照着教程写却持续报错的憋屈感了!咱们直接戳破问题根源,给你靠谱的解决方案:

问题到底出在哪?

你把查询方法的组合逻辑搞反了——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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:10:54