客户端有许多角色。删除客户端后,我想删除所有角色。
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
如文档中所述,带关联的删除操作只会删除Client
和TenantRole
之间的引用。在您的情况下,它只是更新了TenantRole
记录,将client_id
设置为NULL。
如果您也想删除对象,可以尝试将Select
与删除操作一起使用。请注意,只有当主键不为零时,这才有效,所以您的查询可能看起来像这样:
err = db.Select("TenantRoles").Delete(&Client{Id: clientId}).Error
或者如果已经填充了Id
字段,则仅使用clientToRemove
err = db.Select("TenantRoles").Delete(&clientToRemove).Error