Golang GORM联接和结果

时间:2018-10-24 05:55:18

标签: go join go-gorm

假设我有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查询的结果读入结果结构。

1 个答案:

答案 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}}