我正在使用GORM实现一些删除功能。我的想法是级联删除,当父行被删除时,子行也会被删除。我尝试了使用select删除。但它只会删除父记录。
func DeleteProject(db *gorm.DB, id uint) (Project, error) {
var project Project
if err := db.Select(clause.Associations).Delete(&project, id).Error; err != nil {
return Project{}, err
}
return project, nil
}
我有以下模型:
type Project struct {
ID uint `gorm:"primary_key" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"`
TicketNumber string `gorm:"size:6;unique;not null" json:"ticketnumber"`
Name string `json:"name"`
MailingList string `json:"mailinglist"`
Environment string `gorm:"not null" json:"environment"`
UserID uint `gorm:"index" json:"user_id"`
Diagrams []Diagram `json:"diagrams"`
}
type Diagram struct {
ID uint `gorm:"primary_key" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"`
Data string `json:"data"`
ProjectID uint `gorm:"index" json:"project_id"`
Instances []Instance `json:"instances"`
}
type Instance struct {
ID uint `gorm:"primary_key" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"`
Key uint `json:"key"`
DiagramID uint `gorm:"index" json:"diagram_id"`
}
其中,一个项目可以有多个关系图,而一个关系图可以有多个实例。但是当我运行该函数时,它只会删除而不是关联的图和实例。DeleteProjectProject
在这种情况下,如何删除项目及其关联的图表和实例?
温温酱
相关分类