GORM 连接和结果

jju*_*9jj 7 join go go-gorm

假设我有 2 个表,它们共享一些列名,例如:

table_1
- id
- created_at
- deleted_at
- name
- color

table_2
- id
- created_at
- deleted_at
- address
- name
Run Code Online (Sandbox Code Playgroud)

当我在 2 个表上运行连接查询时,我得到这样的结果: id, created_at, name, color, id, created_at, deleted_at, address, name

我有 2 个结构类似于我上面描述的模型。现在我想将结果扫描到结果结构中:

type Result struct {
 Model1
 Model2
}
Run Code Online (Sandbox Code Playgroud)

然后我使用db.Raw().Scan(&result). 现在的问题是:table_2 的 id 永远不会写入表 2 的结构中,只会写入结果结构中表 1 的结构中。

我希望我足够清楚地描述了我的问题。我的问题是:当存在名称相同的列时,如何将 JOIN 查询的结果读取到结果结构中。

Eze*_*uns 5

我不知道这在 Gorm V1 中是否可行,但在 V2 中,您可以使用带有前缀的嵌入式结构来消除两个结果集的歧义,然后您可以适当地命名列以将它们定向到正确的嵌入式模型:

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}}
Run Code Online (Sandbox Code Playgroud)