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

Laravel 如何使用with()方法从多个关联关系中获取指定列

你遇到的返回空数组的核心原因是:HasMany类型的关联预加载指定字段时,必须携带关联对应的外键字段,否则Eloquent无法将子表查询结果和父表记录做匹配,就会返回空数组。
你之前的写法里只给ans_options指定了ac_id、ac_choiceTxt两个字段,漏掉了关联外键ac_quest_id,就会出现匹配失败的问题。


正确实现方式

方式1:闭包写法修正

Questions::with([
    'questionCategory' => function($query) {
        $query->select('cat_id','cat_value');
    },
    'ans_options' => function($query1) {
        // 新增关联外键ac_quest_id,用于和父模型的q_id匹配
        $query1->select('ac_id','ac_quest_id','ac_choiceTxt');
    }
])->get();

方式2:更简洁的字段简写写法

Questions::with('questionCategory:cat_id,cat_value','ans_options:ac_id,ac_quest_id,ac_choiceTxt')->get();

补充说明

以上两种写法返回的结果中,ans_options条目会包含ac_quest_id字段用于关联匹配,如果你不需要对外暴露该字段,可以在App\Models\AnswerChoices模型中添加$hidden属性隐藏:

// 在AnswerChoices模型类中添加
protected $hidden = ['ac_quest_id'];

你也可以通过API资源层对返回字段做二次过滤。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:45:04