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

Eloquent关联预加载使用select后返回空数组的原因及解决方法

问题产生原因

  • Eloquent 关联预加载依赖关联键完成父子模型的匹配:你定义的codes关联本质是父模型通过自身主键,关联codes表的对应外键字段,你在闭包中仅执行select('code'),没有查询该关联外键,Eloquent 无法将查询到的codes记录匹配到对应的父模型上,就会返回空结果。
  • codes下嵌套的子关联(codes.status/codes.company/codes.item.serials等)的预加载依赖codes表的主键:这些子关联都是以codes表的主键作为关联键查询的,你没有查询codes的主键,即使父关联匹配成功,后续子关联也无法完成数据匹配。

修复方案

只需要在select语句中把关联需要的外键、主键都加入查询字段即可,示例如下(请将字段替换为你实际表中的关联字段):

$model::query()
        ->with([
           'codes' => function ($query) {
              // 依次为codes表主键、codes关联父模型的外键、你需要的业务字段code
              $query->select('id', 'parent_model_id', 'code');
           },
           'codes.status',
           'codes.company',
           'codes.type',
           'codes.item.serials',
         ])->get();
  • 如果你后续需要给codes的子关联也加select字段限制,同样要注意带上子关联对应的关联键,比如给codes.item加select时,需要带上item表关联codes的外键,以及item自身的主键(用于加载item.serials关联)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:18:03