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
相关产品推荐
相关产品推荐

