首页 文章

无法使用gorm Postgresql设置外键

提问于
浏览
1

我正在使用jinzhu/gorm构建Golang后端,并且我在尝试在两个表之间 Build 关系时遇到了一些麻烦,例如:使用外键的物品和制造商 .

我正在按照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") 关联

  • 手动将它们与 db.Model("items").Related("manufacturers") 关联 . 它们在Postgresql上使用此名称创建,即使它们的模型名称是单数 .

EDIT

尝试类似的东西

type Item struct {
    Item             string       `gorm:"primary_key"`
    Manufacturer     Manufacturer
    ManufacturerID   int
}

type Manufacturer struct {
    ID uint
    Name string
}

导致相同的结果 . 没有创建外键,我可以插入不存在的新项目 Manufacturer .

What Am I doing wrong? Am I missing something?

1 回答

  • 1

    你必须这样做:

    type Item struct {
        gorm.Model
        Item         string       `gorm:"primary_key"`
        ManufacturerName string   `sql:"type:varchar REFERENCES manufacturers(name)"`
        Manufacturer Manufacturer `gorm:"ForeignKey:ManufacturerName;AssociationForeignKey:Name`
    }
    

    告诉它a)使用ManufacturerName作为外键,B)在另一个表上使用Name .

    或者你可以这样做:

    type Item struct {
        gorm.Model
        Item         string       `gorm:"primary_key"`
        ManufacturerID uint       `sql:"type:uint REFERENCES manufacturers(id)"`
        Manufacturer Manufacturer `gorm:"ForeignKey:Man;AssociationForeignKey:Name"`
    }
    

相关问题