如何在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
补充注意事项
- 修正原查询的参数语法错误:
['1234'.'3456']是无效的Go切片写法,正确应为[]string{"1234", "3456"} - 确保
out结构体中的PhoneNumber字段带有正确的gorm标签,明确映射到users表的phone_number列 - 若不想用结构体嵌入,也可直接在
out结构体中定义所有公司字段+PhoneNumber,效果一致
内容的提问来源于stack exchange,提问作者Abhay Kumar
相关产品推荐
相关产品推荐

