客户端有许多角色。我想在删除客户端后删除所有角色。
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
})
我希望删除role中的相关行,而不是删除查询,它执行更新查询来删除client_id。
[210.834ms] [rows:1] UPDATE "role" SET "client_id"=NULL WHERE "role"."client_id" = 'xxxxxxxxxxx' AND "role"."id" = 9
如何完全删除关联角色表中的行?
数据库为Postgres
1条答案
按热度按时间mzsu5hc01#
如文档中所述,关联删除操作只会删除
Client
和TenantRole
之间的引用。在您的示例中,它只会更新TenantRole
记录,将client_id
设置为NULL。如果您也想删除对象,可以尝试使用
Select
执行删除操作。请注意,这只在主键不为零时有效,因此您的查询可能类似于:或者,如果已经填充了
Id
字段,则使用clientToRemove