1 回答

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個(gè)贊
根據(jù)您發(fā)布的問題鏈接和其他相關(guān)問題,可能無法clause.Associations用于嵌套超過一層的關(guān)系。在你的情況下,Profile與你相關(guān)的User被刪除,但Post與 相關(guān)的 s沒有被刪除Profile。
刪除所有想要的關(guān)聯(lián)的一種方法是使用刪除掛鉤。要么 要么BeforeDelete,AfterDelete取決于您的設(shè)置以及您的關(guān)系有多牢固。例如:
func (u *User) BeforeDelete(tx *gorm.DB) (err error) {
if err := tx.Joins("profiles p ON p.id = posts.profile_id").Joins("users u ON u.id = p.user_id").Where("u.id = ?", u.Base.Id).Delete(&Post{}).Error; err != nil {
return err
}
return tx.Joins("users u ON u.id = profiles.user_id").Where("u.id = ?", u.Base.Id).Delete(&Profile{}).Error
}
這樣,當(dāng)你執(zhí)行時(shí)configs.Database.Delete(&models.User{Base: base}),它會(huì)先執(zhí)行鉤子,然后再執(zhí)行這個(gè)查詢。
另一種方法是分別執(zhí)行掛鉤函數(shù)中的所有查詢:
base := models.Base{Id: id}
if err := configs.Database.Joins("profiles p ON p.id = posts.profile_id").Joins("users u ON u.id = p.user_id").Where("u.id = ?", base.Id).Delete(&Post{}).Error; err != nil {
return c.Status(400).JSON(err.Error())
}
if err := configs.Database.Joins("users u ON u.id = profiles.user_id").Where("u.id = ?", base.Id).Delete(&Profile{}).Error; err != nil {
return c.Status(400).JSON(err.Error())
}
if err := configs.Database.Delete(&models.User{Base: base}).Error; err != nil {
return c.Status(400).JSON(err.Error())
}
- 1 回答
- 0 關(guān)注
- 257 瀏覽
添加回答
舉報(bào)