私はjinzhu/gormを使用してGolangバックエンドを構築していますが、2つのテーブルの間の関係を設定しようとするといくつか問題があります。 品目および製造元外部キーを使用しています。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"`
}
私はエラーや警告なしを取得していません。私のテーブルを調べると、相関関係が作成されていないことに気付きました。アイテムに製造者フィールドがありません。 Manufacturer
フィールドが既に手動で手動db.Model(&model.Item{}).Related(&model.Manufacturer{}, "Manufacturer")
に関連付けるdb.Model(&model.Item{}).Related(&model.Manufacturer{})
gorm:"ForeignKey:Name;AssociationForeignKey:Name"
Manufacturer
- は、明示的に
gorm:"ForeignKey:Name"
を書いていない:私はこれまで試したどのような - と手動で関連付ける。モデルの名前が単数であっても、Postgresqlでこの名前で作成されます。
EDIT:
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 * to * foreign *に修正するべきです。 – AndreaM16
gormは実際に外部キーを作成することにいくつか問題があるようです(https:// github。com/jinzhu/gorm/issues/23)、 'sql'タグを使って実際の鍵を作ることができるようです。自動化する順序を注意して、それが参照するテーブルが既に存在するようにするだけです。 – dave