【发布时间】:2020-12-10 10:26:22
【问题描述】:
假设我们有以下模型:
type Company struct {
gorm.Model
Name string
Addresses []Address
}
type Address struct {
gorm.Model
CompanyID uint64
Street string
City string
Country string
}
我想获取在特定位置有地址的所有公司(及其地址)。像这样的:
SELECT company.*, address.* FROM company
INNER JOIN address ON address.company_id = company.id AND address.country = 'Bulgaria'
因此,如果一家公司在特定位置没有地址,我根本不会得到它。我正在尝试这样的事情:
db.Joins("Addresses", "addresses.country = ?", "Bulgaria").Find(&companies)
但是,它不起作用,因为 GORM 不接受 Joins 的第二个参数(在使用预加载连接时),所以我应该检查生成的查询并进行类似的操作:
db.Where(`"Address".country = ?`, "Bulgaria").Joins("Addresses").Find(&companies)
有没有更好的方法/不是 hacky 的方法?请记住,以上所有代码都是对真正问题的模拟,我不想暴露原始模型/查询。
【问题讨论】:
-
你为什么使用
LEFT JOIN?它会给你所有的公司。 -
@Popeye 我的错,已编辑
标签: sql postgresql go go-gorm