0
我正在使用jinzhu/gorm構建Golang後端,並且在嘗試設置兩個表格之間的關係時遇到了一些問題,例如, 項目和製造商使用外鍵。無法使用gorm設置外鍵Postgresql
我遵循jinzhu.me/gorm/models的步驟,但我老實發現自己感到困惑來自手動書寫表等的更直接的方法,例如,使用go pq。
item.go:
package model
import "github.com/jinzhu/gorm"
type Item struct {
gorm.Model
Item string `gorm:"primary_key"`
Manufacturer Manufacturer `gorm:"ForeignKey:Name"`
}
manufacturer.go:
package model
import "github.com/jinzhu/gorm"
type Manufacturer struct {
gorm.Model
Name string `gorm:"primary_key"`
}
我沒有得到任何錯誤,也沒有警告。檢查我的表我發現沒有相關性被創建。項目沒有製造商字段。
我試過到目前爲止:
- 未清楚地寫
gorm:"ForeignKey:Name"
因爲Manufacturer
領域已經是一個Manufacturer
- 寫作
gorm:"ForeignKey:Name;AssociationForeignKey:Name"
- 手動他們
db.Model(&model.Item{}).Related(&model.Manufacturer{})
- 手動關聯他們
db.Model(&model.Item{}).Related(&model.Manufacturer{}, "Manufacturer")
關聯
- 手動將它們與關聯。即使它們的模型名稱是單數,它們也會在Postgresql上使用該名稱創建。
編輯:
試圖像
type Item struct {
Item string `gorm:"primary_key"`
Manufacturer Manufacturer
ManufacturerID int
}
type Manufacturer struct {
ID uint
Name string
}
導致了同樣的結果。沒有外鍵被創建,我可以插入一個不存在的新項目Manufacturer
。
我在做什麼錯?我錯過了什麼嗎?
它不工作。 'ManufacturerName'獲得創建,但它不是一個外鍵。如果你用'ManufacturerName ='test''插入一個新項目,'Manufacturer'沒有'test'項目,它不會引發任何錯誤。另外,使用PGAdmin,它似乎根本不會創建任何外鍵約束。無論如何,你應該編輯你的答案修正* foriegn *到* foreign *。 – AndreaM16
看起來gorm在實際創建外鍵時存在一些問題(根據https:// github。com/jinzhu/gorm/issues/23),但是您似乎可以使用'sql'標籤創建實際的密鑰 - 您只需要注意自動生成的順序,以便它所引用的表已經存在。 – dave