亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何設置關聯刪除在字段與軟刪除?

如何設置關聯刪除在字段與軟刪除?

Go
呼如林 2022-08-01 16:45:59
我應該如何使用軟刪除中的關聯?我有以下結構type PrivateGormModel struct {    ID        uint       `gorm:"primaryKey" json:"id,string"`    CreatedAt time.Time  `json:"-"`    UpdatedAt time.Time  `json:"-"`    DeletedAt *time.Time `gorm:"index" json:"-"`}type Relation struct {    PrivateGormModel    OwnerID      uint          `json:"ownerID"`    OwnerType    string        `json:"ownerType"`    Addresses    []Address     `gorm:"polymorphic:Owner;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"addresses"`    Contacts     []Contact     `gorm:"polymorphic:Owner;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"contacts"`    People       []Person      `gorm:"polymorphic:Owner;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"people"`    BankAccounts []BankAccount `gorm:"polymorphic:Owner;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"bankAccounts"`}type Company struct {    PrivateGormModel    Name     string   `json:"name"`    Relation Relation `gorm:"polymorphic:Owner;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"relation"`}我省略了地址,聯系人,人員和銀行帳戶結構,以保持此帖子簡短,但它們是帶有和的簡單結構。以及以下處理程序OwnerIDOwnerTypefunc DeleteCompany(db *database.Database) fiber.Handler {    return func(c *fiber.Ctx) error {        id, err := IDFromParams(c)        if err != nil {            return c.JSON(responseKit.ParameterMissing())        }        toDelete := new(model.Company)        result := db.Preload("Relation.Addresses").            Preload("Relation.Contacts").            Preload("Relation.People").            Preload("Relation.BankAccounts").            Preload(clause.Associations).            First(toDelete, id)        fmt.Printf("\n%v", toDelete)        result = db.Select("Relation.Addresses").            Select("Relation.Contacts").            Select("Relation.People").            Select("Relation.BankAccounts").因此,該關系將被刪除。但它并沒有為hasMany關系做任何事情。我讀了這個https://gorm.io/docs/associations.html#Delete-with-Select并試圖這樣做,因為約束似乎沒有做任何事情,但似乎沒有任何作用,并刪除了地址,聯系人,人員和銀行帳戶。我應該如何軟刪除公司的所有關系?
查看完整描述

1 回答

?
月關寶盒

TA貢獻1772條經驗 獲得超5個贊

我已經用最新版本的Gorm對此進行了測試,并且“選擇和刪除”僅適用于一級關聯。


所以如果你做了


db.Select("Relation").Delete(toDelete)

您會看到“公司”和“關系”都將“已刪除時間”設置為當前時間戳。


要實現二級關系的軟刪除,您需要在單獨的調用中刪除這些關系:


db.Select("Addresses", "Contacts", "People", "BankAccounts").Delete(toDelete.Relation)

// or more compactly

db.Select(clause.Associations).Delete(toDelete.Relation)

同樣值得問問的是,對于您的用例來說,僅軟刪除模型樹的根目錄并將其他所有內容保留原樣是否還不夠。


查看完整回答
反對 回復 2022-08-01
  • 1 回答
  • 0 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號