【发布时间】:2022-11-03 16:23:00
【问题描述】:
一个客户有很多角色。删除客户端后,我想删除所有角色。
type Client struct {
Id string `gorm:"primaryKey"`
CreatedAt time.Time
UpdatedAt time.Time
Roles [] Role
}
type Role struct {
Id uint `gorm:"primarykey"`
CreatedAt time.Time
UpdatedAt time.Time
ClientID string
}
return db.Transaction(func(tx *gorm.DB) error {
err = db.Model(&clientToRemove).Association("Roles").Delete(&clientToRemove.Roles)
if err != nil {
return err
}
err = db.Delete(&clientToRemove).Error
if err != nil {
return err
}
return nil
})
我希望删除角色中的相关行,而不是删除查询,而是执行更新查询以删除 client_id。
[210.834ms] [rows:1] UPDATE "role" SET "client_id"=NULL WHERE "role"."client_id" = 'xxxxxxxxxxx' AND "role"."id" = 9
如何完全删除关联角色表中的行?
数据库是 Postgres
【问题讨论】:
-
您可以使用
ON DELETE CASCADE作为数据库架构中的外键,然后删除客户端。
标签: postgresql windows go go-gorm