首頁 > 後端開發 > Golang > 僅當關聯不存在時如何建立關聯? (戈爾姆)

僅當關聯不存在時如何建立關聯? (戈爾姆)

WBOY
發布: 2024-02-09 11:15:28
轉載
943 人瀏覽過

仅当关联不存在时如何创建关联? (戈尔姆)

php小編草莓將為您解答如何在關聯不存在時建立關聯。在程式設計中,我們經常需要使用關聯數組來儲存和操作資料。但有時候我們需要在關聯數組中建立一個新的關聯,但又不希望覆寫已存在的關聯。這時,我們可以使用條件判斷來實現,只在關聯不存在時才創造新的關聯。這種方法可以確保資料的完整性和準確性,提高程式碼的可讀性和可維護性。下面我們來看具體的實作方法。

問題內容

我正在循環遍歷字串數組,以建立具有該屬性的文件(僅當該屬性不存在時):

(dbi:我的 gorm 資料庫實例)

var posttags []models.tag

for _, tagslug := range tagsarray {
    tag := models.tag{
        slug: tagslug,
    }

    err = dbi.where("slug = ?", tagslug).firstorcreate(&tag).error
    if err != nil {
            return c.status(fiber.statusinternalservererror).json(fiber.map{
                "error": "internal server error",
            })
    }
    posttags = append(posttags, tag)
}
登入後複製

然後使用這些標籤建立貼文:

post := models.post{
       ...,
       tags: posttags 
}]

dbi.create(&post)
登入後複製

型號:

type Post struct {
    BaseModel
    Title string `json:"title"`
    MarkdownUploadURL string `json:"markdownUploadUrl"` 
    AuthorID string `json:"authorId"`
    Tags []Tag `json:"tags" gorm:"many2many:posts_tags"`
}

type Tag struct {
    BaseModel
    Slug string `json:"slug"`
}
登入後複製

我嘗試:將dbi.firstorcreate() 改為dbi.first() ,然後檢查errors.is(err, gorm.errrecordnotfound

但是每次呼叫函數時,我都會得到具有不同id 的不同標籤,即使它們已經存在於資料庫中...

解決方法

已修復。而不是在帖子中添加標籤,如下所示:

post := models.post{
       tags: posttags, 
}

dbi.create(&post)
登入後複製

我是這樣做的:

post := models.Post {
        // Other fields (AuthorID, MarkdownUploadURL, Title)
}

dbi.Create(&post)

dbi.Model(&post).Omit("Tags.*").Association("Tags").Append(postTags)
登入後複製

參考:https://github.com/go-gorm/gorm/issues /3605

#

以上是僅當關聯不存在時如何建立關聯? (戈爾姆)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板