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

Laravel关联查询按关联表startup_date排序报错求助

问题原因

你用orderBy('info.startup_date')报错是因为with('info')属于延迟加载——Eloquent会先单独查询users表,再批量拉取关联的user_info数据。主查询阶段数据库里根本不存在info.startup_date这个字段,自然会提示“列未找到”。

解决方案

方案1:使用JOIN关联表(推荐)

直接关联两张表,就能直接用关联表字段排序:

$response = EloquentUser::join('user_info', 'users.id', '=', 'user_info.user_id')
    // 按需选择字段,避免两张表的id字段重复冲突
    ->select('users.*', 'user_info.store_name', 'user_info.startup_date')
    ->orderBy('user_info.startup_date')
    ->get();

如果只需要users表的原始数据,写select('users.*')即可,不影响排序逻辑。

方案2:用子查询实现排序

不想用JOIN的话,可通过子查询获取每个用户对应的startup_date来排序:

$response = EloquentUser::has('info')
    ->orderByRaw('(SELECT startup_date FROM user_info WHERE user_info.user_id = users.id)')
    ->with('info')
    ->get();

这种方式适合需要保留Eloquent关联模型结构,同时基于关联字段排序的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:12:06