首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >通过外键进行联合查询

通过外键进行联合查询
EN

Stack Overflow用户
提问于 2018-04-14 14:45:17
回答 2查看 107关注 0票数 1

我有以下两个模型:FileSession,一个会话可以有多个文件对象(一对多)。

代码语言:javascript
复制
type Session struct {
    gorm.Model
    Name            string       `json:"name,omitempty"`    
    IsCurrent       bool         `json:"is_current"`
    Files     []File `gorm:"foreignkey:SessionID" json:"files"`
}

type File struct {
    gorm.Model
    Name        string `json:"name"`
    FileType    string `json:"file_type"`
    ParentName  string `json:"parent_name"`
    SessionID   uint   `json:"session_id"`
}

我想要获取与具有IsCurrent = true的会话相关联的所有文件

我写了以下原始的SQL查询,看起来工作得很好,但我想知道是否有任何方法可以在Gorm中执行类似的查询。

SELECT err = db.Raw("SELECT * FROM files,SELECT* WHERE files.session_id == sessions.id files.session_id== sessions.is_current = ?",SELECT*FROM files,SELECT*WHERE WHERE files.session_id==sessions.id AND sessions.is_current=?“,SELECT*FROM files,SELECT*SELECT WHERE files.session_id==sessions.id AND sessions.is_current=?”,SELECT

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-18 10:06:19

@TonyGW关键是在Gorm调用中使用PreloadWhere的组合。

代码语言:javascript
复制
currentSession := &Session{}

err := db.Model(&Session{}).Preload("Files").Where(&Session{IsCurrent: true}).Find(&currentSession).Error
if err != nil {
  fmt.Println("Error:", err)
}

fmt.Printf("%+v\n", currentSession)

仅供参考

有许多方法可以构造Where查询。例如,

代码语言:javascript
复制
db.Model(&Session{}).Preload("Files").Where("is_current = ?", true).Find(&currentSession)

并且还使用映射来建立多个Where条件,

代码语言:javascript
复制
db.Model(&Session{}).Preload("Files").Where(map[string]interface{}{
  "is_current": true,
  "something_else": "value",
}).Find(&currentSession)

我希望这对你有帮助!

票数 0
EN

Stack Overflow用户

发布于 2018-04-14 20:45:45

试试这个

代码语言:javascript
复制
db.Where("is_current = ?", true).Model(&session).Related(&session.Files)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49828714

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档