जब मैं डेटा के साथ शॉपिंगलिस्ट संरचना को अपडेट करने का प्रयास करता हूं तो मुझे "ऑन कॉन्फ्लिक्ट विनिर्देश (एसक्यूएलएसटीएटी 42 पी 10) से मेल खाने वाली कोई अनूठी या बहिष्करण बाधा नहीं है" त्रुटि

ये मेरे स्ट्रक्चर हैं

type Shoppinglist struct {
    Model

    ID           int            `gorm:"primaryKey" json:"id"`
    Title        string         `json:"title"`
    Items        []Item         `json:"items" gorm:"foreignKey:ParentListID;references:ID;"`
    Owner        string         `json:"owner"`
    Participants pq.StringArray `gorm:"type:text[]" json:"participants"`
}

type Item struct {
    Model

    ParentListID int    `gorm:"primaryKey" json:"parentListId"`
    Title        string `json:"title"`
    Position     int    `json:"position"`
    Bought       bool   `json:"bought"`
}

और यह वह कोड है जिसे मैं किसी सूची को संपादित करने का प्रयास करते समय निष्पादित करता हूं

func EditList(id int, data map[string]interface{}) error {
    //https://github.com/go-gorm/gorm/issues/3487

    shoppinglist := Shoppinglist{
        ID:           data["id"].(int),
        Title:        data["title"].(string),
        Items:        data["items"].([]Item),
        Owner:        data["owner"].(string),
        Participants: data["participants"].([]string),
    }

    if err := db.Session(&gorm.Session{FullSaveAssociations: true}).Where("id = ?", id).Updates(&shoppinglist).Error; err != nil {
        return err
    }

    return nil
}

यह वह जगह है जहां मैं संपादन सूची निष्पादित करता हूं और जहां मैंने मानचित्र को नीटो पास करने के लिए सभी मान निर्धारित किए हैं:

type Shoppinglist struct {
    ID           int
    Title        string
    Items        []models.Item
    Owner        string
    Participants []string
    PageNum      int
    PageSize     int
}

func (s *Shoppinglist) Edit() error {
    shoppinglist := map[string]interface{}{
        "id":           s.ID,
        "title":        s.Title,
        "items":        s.Items,
        "owner":        s.Owner,
        "participants": s.Participants,
    }

    return models.EditList(s.ID, shoppinglist)
}

इससे पहले कि मैं [] आइटम के बजाय [] स्ट्रिंग का उपयोग कर रहा था और वह पूरी तरह से काम कर रहा था। अब []आइटम . को छोड़कर सब कुछ अपडेट हो गया है

ये निष्पादित SQL क्वेरी हैं:

UPDATE "shoppinglists" SET "modified_on"=1628251977096,"title"='kjhdsfgnb',"owner"='janburzinski1@gmail.com',"participants"='{}' WHERE id = 517687 AND "id" = 517687

INSERT INTO "items" ("created_on","modified_on","deleted_at","title","position","bought","parent_list_id") VALUES (1628251977,1628251977116,NULL,'dfkjhgndfjkg',1,false,517687),(1628251977,1628251977116,NULL,'dfgh123',2,true,517687) ON CONFLICT ("parent_list_id") DO UPDATE SET "created_on"="excluded"."created_on","modified_on"="excluded"."modified_on","deleted_at"="excluded"."deleted_at","title"="excluded"."title","position"="excluded"."position","bought"="excluded"."bought" RETURNING "parent_list_id"

मैं वास्तव में जानना चाहता हूं कि गोर्म में एक रिश्ते को कैसे अपडेट किया जाए या यह क्यों काम नहीं कर रहा है क्योंकि मैं जीथब और स्टैक ओवरफ्लो पर एसोसिएशन के सभी मुद्दों को देख रहा हूं और मुझे कोई जवाब नहीं मिला जो मेरे लिए काम करता हो।

1
CryptoBot 88 8 अगस्त 2021, 11:39

2 जवाब

सबसे बढ़िया उत्तर

पहली समस्या जो मैं यहां देख रहा हूं, वह यह है कि आपके आइटम में कोई आईडी नहीं है, लेकिन प्राथमिक कुंजी के रूप में पेरेंटलिस्ट का उपयोग करता है। इसका मतलब है कि आपके पास प्रत्येक माता-पिता के लिए केवल एक आइटम हो सकता है जो एक सरणी रखने के उद्देश्य को हरा देता है।

आइटम के लिए एक आईडी फ़ील्ड बनाएं (प्राथमिक कुंजी के रूप में प्रयुक्त) और यदि आपके दृष्टिकोण के साथ अभी भी समस्याएं हैं, तो कृपया प्रश्न अपडेट करें।

पीएस: इसे एक टिप्पणी में छोड़ दिया होगा, लेकिन नहीं कर सकता।

0
Anni 10 अगस्त 2021, 14:02

मुझे बस [] आइटम में * जोड़ने और प्राथमिक कुंजी के साथ समस्या को ठीक करने और संदर्भ को हटाने की आवश्यकता है।

type Shoppinglist struct {
    Model

    ID           int            `gorm:"primaryKey" json:"id"`
    Title        string         `json:"title"`
    Items        []*Item        `json:"items" gorm:"foreignKey:ParentListID;"`
    Owner        string         `json:"owner"`
    Participants pq.StringArray `gorm:"type:text[]" json:"participants"`
}

type Item struct {
    Model

    ID           int    `gorm:"primaryKey" json:"id"`
    ParentListID int    `json:"parentListId"`
    ItemID       int    `json:"itemId"`
    Title        string `json:"title"`
    Position     int    `json:"position"`
    Bought       bool   `json:"bought" gorm:"default:false"`
}
0
CryptoBot 88 30 अगस्त 2021, 13:31