ZBLOG

golang gorm 如何设置外键

在 Gorm 中设置外键可以通过定义模型之间的关系来实现。具体步骤如下:

  1. 定义主表和从表的模型
type Product struct {
  ID    uint `gorm:"primary_key"`
  Name  string
}

type Order struct {
  ID         uint `gorm:"primary_key"`
  ProductID  uint
  Quantity   int
}
  1. 在从表模型中定义外键
func (o *Order) TableName() string {
  return "orders"
}

func (o *Order) BeforeCreate(scope *gorm.DB) error {
  scope.SetColumn("product_id", o.ProductID)
  return nil
}

func (o *Order) AfterCreate(scope *gorm.DB) error {
  err := scope.Model(o).UpdateColumn("product_id", o.ProductID).Error
  return err
}

func (o *Order) BeforeSave(scope *gorm.DB) error {
  scope.SetColumn("product_id", o.ProductID)
  return nil
}

func (o *Order) AfterSave(scope *gorm.DB) error {
  err := scope.Model(o).UpdateColumn("product_id", o.ProductID).Error
  return err
}

func (o *Order) BeforeUpdate(scope *gorm.DB) error {
  scope.SetColumn("product_id", o.ProductID)
  return nil
}

func (o *Order) AfterUpdate(scope *gorm.DB) error {
  err := scope.Model(o).UpdateColumn("product_id", o.ProductID).Error
  return err
}


func (o *Order) BeforeDelete(scope *gorm.DB) error {
  scope.SetColumn("product_id", o.ProductID)
  return nil
}

func (o *Order) AfterDelete(scope *gorm.DB) error {
  err := scope.Model(o).UpdateColumn("product_id", o.ProductID).Error
  return err
}
  1. 定义从表模型的关系
func (o *Order) BeforeSave(scope *gorm.DB) error {
  scope.SetColumn("product_id", o.ProductID)
  return nil
}

func (o *Order) AfterSave(scope *gorm.DB) error {
  err := scope.Model(o).UpdateColumn("product_id", o.ProductID).Error
  return err
}

func (o *Order) BeforeUpdate(scope *gorm.DB) error {
  scope.SetColumn("product_id", o.ProductID)
  return nil
}

func (o *Order) AfterUpdate(scope *gorm.DB) error {
  err := scope.Model(o).UpdateColumn("product_id", o.ProductID).Error
  return err
}


func (o *Order) BeforeDelete(scope *gorm.DB) error {
  scope.SetColumn("product_id", o.ProductID)
  return nil
}

func (o *Order) AfterDelete(scope *gorm.DB) error {
  err := scope.Model(o).UpdateColumn("product_id", o.ProductID).Error
  return err
}
  1. 进行数据库迁移
db.AutoMigrate(&Product{}, &Order{})

上述代码定义了一个主表 Product 和一个从表 Order,从表 Order 中有一个外键 ProductID 关联到主表 Product 的 ID 字段。在从表 Order 模型中,通过 BeforeCreate、AfterCreate、BeforeSave、AfterSave、BeforeUpdate、AfterUpdate、BeforeDelete、AfterDelete 方法设置外键的值以保证数据的一致性。最后通过 db.AutoMigrate() 函数将模型映射到数据库中进行迁移。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=755

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?