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

Laravel关联查询如何按ProjectTypeOrder的order字段对ProjectType排序

实现方案

你可以在预加载types关联时传入闭包自定义关联查询逻辑,通过联表关联ProjectTypeOrder后按order字段排序即可,同时保留你原有的images、types.order关联加载需求。

方案1:仅当前查询生效

修改你的查询代码如下:

Project::with([
    'images',
    'types' => function ($query) {
        // 联表关联排序规则,注意替换为你实际的表名、外键字段名
        $query->select('project_types.*') // 避免联表后同名字段覆盖
              ->join('project_type_orders', 'project_types.id', '=', 'project_type_orders.project_type_id')
              ->orderBy('project_type_orders.order', 'asc'); // 降序排序改为desc即可
    },
    'types.order'
])->get();

方案2:全局关联默认排序

如果所有查询Project的types关联时都需要按这个规则排序,可以直接在Project模型的关联定义中添加排序逻辑,原有查询代码无需修改:

// Project.php 模型文件中
public function types()
{
    return $this->hasMany(ProjectType::class)
        ->select('project_types.*')
        ->join('project_type_orders', 'project_types.id', '=', 'project_type_orders.project_type_id')
        ->orderBy('project_type_orders.order', 'asc');
}

注意事项

  • 如果ProjectTypeOrder模型开启了软删除,需要在联表条件中补充->whereNull('project_type_orders.deleted_at')排除已删除数据
  • 注意替换代码中的表名、外键字段为你实际的数据库字段定义
  • 如果允许ProjectType没有关联的ProjectTypeOrder记录,且需要保留这部分数据,将join改为leftJoin即可,避免数据被过滤

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:18:05