sql - Gorm复杂查询的返回值

标签 sql go go-gorm

假设我有:

type A struct {
  ID   string `gorm:"primary_key"`
  Name string
}

type B struct {
  ID   string `gorm:"primary_key"`
  AId  string
  A    A `gorm:"foreignkey:AId"`
  Val  string
}

如果我想对 A 或 B 进行正常查询,我可以期待 A 或 B 结构返回。但如果我想做一个连接,我应该在 go 中期待什么结构?

例如,如果我的查询是:

select * from a join b on a.id = b.a_id;

GORM 以结构形式返回什么?

最佳答案

转换查询

select * from a join b on a.id = b.a_id;

进入戈尔姆:

db.Tables("a").Select("a.id as aid, a.name as aname, b.id as bid, b.a_id as baid, b.val as bval").Joins("JOIN b ON a.id = b.a_id").Find(&result)

我们可以创建一个临时 result 结构,其中包含表 ab 中的所有字段。

result := []struct {
    ID   string `db:"aid"`
    Name string `db:"aname"`
    BId  string `db:"bid"`
    AId  string `db:"baid"`
    Val  string `db:"bval"`
}{}

然后,根据需要重新打包这个结果结构体,或者返回这个结构体供客户端使用。

关于sql - Gorm复杂查询的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72971372/

相关文章:

mysql - SELECT DISTINCT(column) FROM table on an indexed column 的计算复杂度

sql - 使字符串在数据库中保持不区分大小写的唯一性

sql - 检查格式是否为 YYYY-MM-DD

Go:使用数据库初始化从多个包运行测试

java - 缓存数据库查询结果集需要好的设计模式

http - 在 Go 中高效处理许多大文件的 HTTP 上传

go - 读取文件中的多个 yaml

Go Web 服务器无法正确处理/删除/模式化

mysql - 如何在Gorm V2上设置SQL连接配置

go - 如何使用 gorm 创建到 mysql 的 ssl 连接?