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

Laravel 8.12中如何从关联模型获取指定列?

解决方案:在Laravel 8中指定嵌套关联的查询字段

要在嵌套关联中仅获取指定字段,核心是必须包含关联关系所需的主键和外键,否则Eloquent无法建立关联并返回数据。你之前尝试的person.localName:name写法无效,就是因为缺少了关联必需的键字段。

正确写法示例

你可以通过两种方式实现:

方式1:简洁的冒号分隔格式

直接在关联名后用冒号指定字段,但必须包含关联的主键和外键:

$group = MatchOfficial::with([
    "role",
    // 注意:每个关联都要包含必要的主键/外键,否则关联数据无法匹配
    "match:id,facility_id", // 需包含match的id和关联facility的外键facility_id
    "match.facility:id,local_name_id,location_id", // 包含facility的id、关联localName和location的外键
    "match.facility.localName:id,facility_id,name", // 包含localName的id、关联facility的外键,加上需要的name字段
    "match.facility.location:id,facility_id", // 同理包含必要键
    "person:id,user_id", // 包含person的id、关联users的外键
    "person.users:id,person_id", // 包含users的id、关联person的外键
    "person.localName:id,person_id,name", // 这里就是你需要的:包含localName的id、关联person的外键,加上name
    "person.location:id,person_id", // 包含必要键
])->when($person, function ($query) use ($person) {
        $query->where("person_id", $person);
    })
->get()
->groupBy("person_id");

方式2:闭包自定义查询(适合复杂场景)

如果需要对关联添加额外条件,可使用闭包:

$group = MatchOfficial::with([
    "role",
    "match" => function($query) {
        $query->select('id', 'facility_id'); // 选择match的必要字段
    },
    "match.facility.localName" => function($query) {
        $query->select('id', 'facility_id', 'name'); // 指定localName的字段,包含必要键
    },
    "person.localName" => function($query) {
        $query->select('id', 'person_id', 'name'); // 仅获取localName的name字段,同时保留关联必需的键
    },
    // 其他关联按同样方式处理
])->when($person, function ($query) use ($person) {
        $query->where("person_id", $person);
    })
->get()
->groupBy("person_id");

关键注意事项

  • 无论哪种写法,必须包含关联模型的主键和关联外键:比如person.localName关联中,localName表需要包含主键id和关联person的外键person_id,否则Eloquent无法将localName数据匹配到对应的person模型上,最终返回空的关联数据。
  • 如果不需要主模型的所有字段,也可以在get()方法中指定MatchOfficial本身的字段,比如get(['id', 'person_id', ...])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 21:36:32