GORM 似乎不尊重我基于外键关联表的尝试,而我的主键关联有效。
我有 3 个结构,它们与 3 个单独的数据库表相关联。它们的关系如下:
- Inventory.CustID 与 Customer.CustID 相关(此关联有效)
- 与 Customer.H1 相关的 GroupRules.RuleContent (这不是)
所以,我的结构是:
type Customer struct {
CustID sql.NullInt64 `gorm:"primary_key;Column:CUST_ACCT_ID"`
PlanTypeCd sql.NullString `gorm:"Column:PLAN_TYPE_CD"`
H6 sql.NullString `gorm:"Column:H6_CUST_ACCT_NBR"`
H1 sql.NullString `gorm:"Column:H1_CUST_ACCT_NBR"`
AddressLine1 sql.NullString `gorm:"Column:ADDRESS_LINE_1"`
AddressLine2 sql.NullString `gorm:"Column:ADDRESS_LINE_2"`
City sql.NullString `gorm:"Column:ADDRESS_CTY_NME"`
State sql.NullString `gorm:"Column:ADDRESS_ST_PRVN_CD"`
Zip sql.NullString `gorm:"Column:ADDRESS_PSTL_CD"`
Country sql.NullString `gorm:"Column:ADDRESS_CTRY_CD"`
}
type Inventory struct {
CustID sql.NullInt64 `gorm:"primary_key;Column:CUST_ACCT_ID"`
CmpntTypeCd sql.NullString `gorm:"Column:CMPNT_TYPE_CD"`
AccsBdwdCd sql.NullString `gorm:"Column:ACCS_BDWD_CD"`
PrivateLineNumber sql.NullString `gorm:"Column:PRIVATE_LINE_NBR"`
NtwkUsrAdr sql.NullString `gorm:"Column:NTWK_USR_ADR"`
Customer Customer `gorm:"association_foreignkey;Column:CUST_ACCT_ID"`
}
type GroupRule struct {
RuleID sql.NullInt64 `gorm:"primary_key;Column:RuleID"`
RuleType sql.NullString `gorm:"Column:RuleType"`
RuleContent sql.NullString `gorm:"Column:RuleContent"`
RuleLogic sql.NullString `gorm:"Column:RuleLogic"`
GroupdID sql.NullString `gorm:"Column:GroupID"`
IsActive sql.NullBool `gorm:"Column:isActive"`
LastMatchCount sql.NullInt64 `gorm:"Column:LastMatchCount"`
LastMatchPortIds sql.NullString `gorm:"Column:LastMatchPortIDs"`
Creator sql.NullInt64 `gorm:"Column:Creator"`
ExcludeRule sql.NullBool `gorm:"Column:ExcludeRule"`
Customer Customer `gorm:"association_foreignkey;Column:H1_CUST_ACCT_ID"`
}
然后,我的编码关系:
cust := Customer{}
inv := Inventory{}
groups := GroupRule{}
DB, e := db.DB{}
// turn on logging
DB.LogMode(true)
// Select * From customers;
DB.Find(&cust)
// gorm association between customers and inventory
DB.Model(&cust).Related(&inv, "CUST_ACCT_ID")
// gorm association between customers and group rules (does not work)
DB.Model(&cust).Related(&groups, "RuleContent")
最后一个关联不起作用。相反,它仍在尝试使用 Customer
的 CUST_ACCT_ID
而不是 H1_CUST_ACCT_ID
的外键来运行它的 SQL 查询。
日志输出:
// Customer/Inventory relation lookup
SELECT * FROM `Inventory` WHERE (`CUST_ACCT_ID` = '1439457')
// Customer/GroupRule relation lookup
SELECT * FROM `FON_GroupRules` WHERE (`RuleContent` = '1439457')
在第二次查找中,查询应该类似于 `RuleContent = '9928332')。
谢谢!
最佳答案
刚刚碰到这个。 你最终解决了这个问题吗?
现在我认为 GroupRule 结构应该是
type GroupRule struct {
RuleID sql.NullInt64 `gorm:"primary_key"`
RuleType sql.NullString
RuleContent sql.NullString
RuleLogic sql.NullString
GroupdID sql.NullString
IsActive sql.NullBool
LastMatchCount sql.NullInt64
LastMatchPortIds sql.NullString
Creator sql.NullInt64
ExcludeRule sql.NullBool
Customer Customer `gorm:"foreignKey:RuleContent;references:H1"`
}
关于GORM 和外键关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57166373/