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

如何在GORM单JOIN查询中无需指定全部字段跨表获取数据?

解决方案

核心问题原因

GORM 默认在关联查询时只会查询主表(此处为companies)的字段,不会自动包含关联表(users)的字段,所以即便你的out结构体定义了phone_number字段,也不会被赋值。

无需手动指定所有公司字段的解决方法

直接在查询中用companies.*选中公司表的全部字段,同时显式指定users.phone_number,既不用手动罗列50个字段,又能获取手机号:

// 示例结构体定义(嵌入原Company结构体+手机号字段)
type CompanyWithPhone struct {
    Company // 嵌入原companies表对应的结构体,包含所有50个字段
    PhoneNumber string `gorm:"column:phone_number"`
}

// 修正后的查询语句
var out []CompanyWithPhone
err := gorm.db.Table("companies").
    Select("companies.*, users.phone_number"). // 关键:用companies.*自动选中所有公司字段
    Joins("inner join users ON companies.user_id = users.id AND users.phone_number IN (?)", []string{"1234", "3456"}).
    Find(&out).Error

补充注意事项

  1. 修正原查询的参数语法错误:['1234'.'3456']是无效的Go切片写法,正确应为[]string{"1234", "3456"}
  2. 确保out结构体中的PhoneNumber字段带有正确的gorm标签,明确映射到users表的phone_number列
  3. 若不想用结构体嵌入,也可直接在out结构体中定义所有公司字段+PhoneNumber,效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:30:52