登录
首页 >  Golang >  Go问答

如何使用 GORM 执行具有不同名称的字段引用的联接查询

来源:stackoverflow

时间:2024-02-20 08:54:55 418浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《如何使用 GORM 执行具有不同名称的字段引用的联接查询》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

如何使用 gorm 执行具有不同名称的字段引用的联接查询 像这样:

SELECT * FROM tickets JOIN ticket_details ON tickets.ticket_id = ticket_details.ticket_id JOIN users ON tickets.create_user = users.user_id JOIN employees ON users.employee_id = employees.employee_id

tickets.create_user = users.user_id 没有外键


正确答案


您可以通过使用“连接”来做到这一点

https://gorm.io/docs/query.html#Joins

您提供的查询应该使用这种联接来完成:

db.model(...).joins("join ticket_details on tickets.ticket_id = ticket_details.ticket_id").joins("join users on tickets.create_user = users.user_id").joins("join employees on users.employee_id = employees.employee_id")...

如果您想在模型中设置票证和用户之间的关系

我假设关系是用户“有很多”票

模型user/ticket的id是int64

那么你可以通过设置 gorm“foreignkey”和“references”来做到这一点

https://gorm.io/docs/has_many.html#Override-Foreign-Key

https://gorm.io/docs/has_many.html#Override-References

type ticket struct {
    ticketid int64 `gorm:"primarykey"`
    createuser int64
}

type user struct {
    userid  int64    `gorm:"primarykey"`
    tickets []ticket `gorm:"foreignkey:createuser;references:userid"`
}

那么您应该能够查询具有这样的票证的用户

var users []User
db.Joins("Tickets").Find(&users)

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>