我正在尝试级联删除以下结构:
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)
不起作用。
感谢
-
不能在同一查询中同时使用delete和select意味着这样做不是可行的解决方案但是是的,你可以使用这个参考链接
-
尝试删除带有where条件的操作并指定HallID
db.其中("hall_id IN?",HallID(.删除(&action(
并在Stream中将HallID设置为constraint:OnDelete:CASCADE
,因此当您删除Halls时,Streams将自动删除与该Halls 相关的任何一个
我不能对M_x发表评论,所以我将把它作为一个答案。
允许您使用带有关联的"Select"进行"Delete"。看见https://gorm.io/docs/associations.html#Delete-选择
然而,我也在寻找一种嵌套关联的解决方案,其中嵌套是结构的一部分。