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

如何构建含多where、双orderBy且支持分页/限制的Eloquent查询?

修正你的Eloquent查询并解决运行问题

嘿,我来帮你把这段Eloquent查询修正到能正常运行,顺便拆解下你代码里的几个关键问题:

原代码的核心问题

  • 方法名大小写错误:Eloquent的排序方法是orderBy()(小写字母o开头),不是你写的OrderBy(),PHP是大小写敏感的,这个错误会直接导致方法不存在。
  • 多字段排序写法错误:orderBy()一次只能处理单个字段的排序规则,多个字段排序需要链式调用多次orderBy(),不能把两个字段塞进同一个方法里。
  • 分页与limit冲突:paginate(10)已经会自动处理每页显示10条数据的逻辑,不需要再额外调用limit(25)——两者同时使用会打乱分页的计算逻辑,导致结果不符合预期。
  • (可选优化)如果你的PostIco模型已经通过$table属性指定了posts表,那么->table('posts')可以省略,直接用PostIco::开头即可。

正确的代码实现

1. 分页版本(满足你要的分页需求)

$posts = PostIco::table('posts')
    ->where('listingType', '!=', 1)
    // 第一个排序字段,默认升序(ASC),如果需要降序可以加第二个参数
    ->orderBy('listingType')
    // 第二个排序字段,这里指定降序(DESC),按需调整
    ->orderBy('created_at', 'desc')
    // 每页显示10条,自动处理分页逻辑
    ->paginate(10);

2. 限制结果总数版本(如果不需要分页,只取固定数量的结果)

如果你是想限制返回的总条数而不是分页,就用limit()配合get():

$posts = PostIco::table('posts')
    ->where('listingType', '!=', 1)
    ->orderBy('listingType')
    ->orderBy('created_at', 'desc')
    // 最多返回25条结果
    ->limit(25)
    ->get();

3. 多Where条件扩展

如果需要添加更多where语句,直接链式追加即可,比如:

$posts = PostIco::table('posts')
    ->where('listingType', '!=', 1)
    ->where('status', '=', 'published') // 第二个where条件
    ->where('view_count', '>', 50) // 第三个where条件
    ->orderBy('listingType')
    ->orderBy('created_at', 'desc')
    ->paginate(10);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:44:24