Maison > développement back-end > Golang > Comment créer une association seulement si elle n'existe pas ? (gorme)

Comment créer une association seulement si elle n'existe pas ? (gorme)

WBOY
Libérer: 2024-02-09 11:15:28
avant
945 Les gens l'ont consulté

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

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.

Contenu de la question

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)
}
Copier après la connexion

Créez ensuite une publication en utilisant ces balises :

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

dbi.create(&post)
Copier après la connexion

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"`
}
Copier après la connexion

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...

Solution de contournement

Corrigé. Au lieu d'ajouter un tag à votre message, aimez ceci :

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

dbi.create(&post)
Copier après la connexion

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)
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal