【问题标题】:Golang GORM Delete with SelectGolang GORM 使用 Select 删除
【发布时间】:2021-05-27 07:12:27
【问题描述】:

我正在尝试级联删除以下结构:

type Action struct {
    gorm.Model
    Name  string
    Email string
    Halls []Hall `gorm:"foreignKey:ActionID"`
}

type Hall struct {
    gorm.Model
    Name     string
    ActionID uint
    Stream   Stream  `gorm:"foreignKey:HallID"`
}

type Stream struct {
    ID     uint `gorm:"primaryKey"`
    HallID uint
    Name   string
}

db.Select("Halls").Delete(&action) - 适用于选定的action 和所有相关的halls。

如何删除这个和相关的streams?
比如:

db.Select("Halls", "Streams").Delete(&action)  
db.Select("Streams").Select("Halls").Delete(action)  

没用。

谢谢

【问题讨论】:

  • 我不确定它是否会影响嵌套的Stream 模型,但您可以尝试db.Select("Halls.Stream").Delete(&action) 或db.Select(clause.Associations).Delete(&action)
  • @EminLaletovic 它不起作用。我不确定软删除是否可以实现 OP 的要求。没有它,一个简单的constraint:OnDelete:CASCADE 就可以解决它。

标签: go go-gorm


【解决方案1】:
  • 您不能在同一查询中同时使用 delete 和 select 意味着这样做是不可行的解决方案 但是是的,你可以使用这个reference link

  • 尝试使用 where 条件删除操作并指定 HallID

db.Where("hall_id IN ?",HallID).Delete(&action)

并在 Stream 中将 HallID 设置为 constraint:OnDelete:CASCADE,这样当您删除大厅时,将自动删除与该大厅关联的流

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-07
    • 1970-01-01
    • 2015-06-08
    • 2017-04-23
    • 2021-02-07
    • 1970-01-01
    • 2017-10-17
    • 2019-08-10
    相关资源
    最近更新 更多