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中文網其他相關文章!