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

Laravel中如何使用pagination与sortByDesc?分页报错求助

嘿,我来帮你搞定这个问题!你遇到的Method Illuminate\Database\Eloquent\Collection::links does not exist错误,其实是个很常见的小坑,原因很明确:

问题根源

  • Demmande::paginate(10)返回的是**LengthAwarePaginator分页实例**,这个类自带分页相关的方法(比如你视图里用到的links())
  • 但你紧接着调用sortByDesc('created_at')之后,这个分页实例会被转换成普通的Eloquent Collection集合,而集合类根本没有links()方法,所以视图渲染时就报错了

正确的解决方式

别在分页之后做排序,而是把排序逻辑放到数据库查询阶段,用orderBy代替sortByDesc。这样排序和分页都会在数据库层面执行,返回的依然是完整的分页实例,完美保留分页功能:

public function ViewDemmandes(){
    // 把排序逻辑整合到查询构建器中,先排序再分页
    $listdemmande = Demmande::orderBy('created_at', 'desc')->paginate(10);
    $listvillee = Ville::all();
    $listcategorie = Categorie::all();

    // 其实不用额外赋值变量,直接compact传递原变量更简洁
    return view("demmande.demmandes", compact('listvillee', 'listcategorie', 'listdemmande'));
}

为什么sortByDesc不行?

sortByDesc是Collection的内存排序方法,它只会把当前分页的10条数据在PHP内存里排序,不仅效率不如数据库层面的orderBy,还会直接破坏分页实例的结构,导致丢失links()这类分页专属方法。而orderBy是让数据库先排序数据再分页,既高效又能保留分页功能。

小优化建议

你代码里的$villes = $listvillee;这类变量重新赋值完全没必要,直接把查询出来的变量传递给视图就好,能让代码更简洁清爽~

内容的提问来源于stack exchange,提问作者Zakaria Mountassir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:02:28