Gorm关联删除不删除行,而是更新行



客户端有许多角色。删除客户端后,我想删除所有角色。

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

如文档中所述,带关联的删除操作只会删除ClientTenantRole之间的引用。在您的情况下,它只是更新了TenantRole记录,将client_id设置为NULL。

如果您也想删除对象,可以尝试将Select与删除操作一起使用。请注意,只有当主键不为零时,这才有效,所以您的查询可能看起来像这样:

err = db.Select("TenantRoles").Delete(&Client{Id: clientId}).Error

或者如果已经填充了Id字段,则仅使用clientToRemove

err = db.Select("TenantRoles").Delete(&clientToRemove).Error

相关内容

  • 没有找到相关文章

最新更新