假设我有2个表,它们共享一些列名,例如:
table_1
- id
- created_at
- deleted_at
- name
- color
table_2
- id
- created_at
- deleted_at
- address
- name
当我在2个表上运行联接查询时,我会得到类似以下的信息:id, created_at, name, color, id, created_at, deleted_at, address, name
我有2个类似于我上面描述的模型的结构。现在,我想将结果扫描到结果结构中:
type Result struct {
Model1
Model2
}
然后我使用db.Raw().Scan(&result)
。现在的问题是:
table_2的ID永远不会写入表2的结构中,而只会写入结果结构中的表1的结构中。
我希望我清楚地描述了我的问题。 我的问题是:当存在名为同名的列时,如何将JOIN查询的结果读入结果结构。
答案 0 :(得分:1)
我不知道这在Gorm V1中是否可行,但是在V2中,您可以使用带有前缀的Embedded Structs来消除两个结果集的歧义,然后可以适当地命名列以将其指向右侧嵌入式模型:
type Model1 struct {
ID int `gorm:"primaryKey"`
Value string
}
type Model2 struct {
ID int `gorm:"primaryKey"`
Value string
Color string
}
type Result struct {
Model1 `gorm:"embedded;embeddedPrefix:m1_"`
Model2 `gorm:"embedded;embeddedPrefix:m2_"`
}
res := Result{}
db.Raw(`
SELECT
1 AS m1_id,
'one' AS m1_value,
2 AS m2_id,
'two' AS m2_value,
'rose' AS m2_color
`).Scan(&res)
fmt.Printf("%+v\n", res)
// {Model1:{ID:1 Value:one} Model2:{ID:2 Value:two Color:rose}}