Maison > Article > développement back-end > Comment créer une association seulement si elle n'existe pas ? (gorme)
l'éditeur php Fraise vous expliquera comment créer une association lorsque l'association n'existe pas. En programmation, nous devons souvent utiliser des tableaux associatifs pour stocker et manipuler des données. Mais parfois, nous devons créer une nouvelle association dans le tableau associatif, mais nous ne voulons pas écraser l'association existante. À ce stade, nous pouvons utiliser le jugement conditionnel pour y parvenir et créer une nouvelle association uniquement lorsque l'association n'existe pas. Cette méthode peut garantir l'intégrité et l'exactitude des données et améliorer la lisibilité et la maintenabilité du code. Jetons un coup d'œil à la méthode de mise en œuvre spécifique.
Je parcours un tableau de chaînes pour créer un document avec cette propriété (uniquement si la propriété n'existe pas) :
(dbi : mon instance de base de données 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) }
Créez ensuite une publication en utilisant ces balises :
post := models.post{ ..., tags: posttags }] dbi.create(&post)
Modèle :
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"` }
J'ai essayé : convertir dbi.firstorcreate()
更改为 dbi.first()
,然后检查 errors.is(err, gorm.errrecordnotfound
Mais chaque fois que j'appelle la fonction, j'obtiens différentes balises avec des identifiants différents, même si elles existent déjà dans la base de données...
Corrigé. Au lieu d'ajouter un tag à votre message, aimez ceci :
post := models.post{ tags: posttags, } dbi.create(&post)
Voici ce que j'ai fait :
post := models.Post { // Other fields (AuthorID, MarkdownUploadURL, Title) } dbi.Create(&post) dbi.Model(&post).Omit("Tags.*").Association("Tags").Append(postTags)
Référence : https://github.com/go-gorm/gorm/issues/3605
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!