Maison > développement back-end > Golang > FirstOrCreate vs Upsert : quelle méthode GORM devez-vous utiliser pour créer ou mettre à jour des enregistrements ?

FirstOrCreate vs Upsert : quelle méthode GORM devez-vous utiliser pour créer ou mettre à jour des enregistrements ?

Linda Hamilton
Libérer: 2024-11-09 16:20:02
original
460 Les gens l'ont consulté

FirstOrCreate vs. Upsert: Which GORM method should you use for creating or updating records?

Création ou mise à jour d'enregistrements avec GORM : FirstOrCreate vs Upsert

GORM propose deux méthodes pour créer ou mettre à jour des enregistrements : FirstOrCreate et FirstOrInit. Cependant, il peut être difficile de déterminer si un enregistrement a réellement été créé à l'aide de ces méthodes.

Prise en charge d'Upsert dans GORM 1.20.x et versions ultérieures

Depuis la version 1.20.x , GORM introduit un support Upsert compatible via la clause OnConflict. Cela permet d'insérer des enregistrements dans différentes bases de données.

// Update columns on conflict
DB.Clauses(clause.OnConflict{
  Columns:   []clause.Column{{Name: "id"}},
  DoUpdates: clause.AssignmentColumns([]string{"name", "age"}),
}).Create(&users)
Copier après la connexion

Approche alternative pour GORM 1.9.x et versions antérieures

Dans les versions antérieures de GORM, une méthode efficace pour créer ou mettre à jour les enregistrements consiste d'abord à tenter une mise à jour, suivie d'une insertion si l'enregistrement n'existe pas.

if err := db.Model(&newUser).Where("id = ?", 3333).Update("name", "nick").Error; err != nil {
  if gorm.IsRecordNotFoundError(err) {
    db.Create(&newUser)
  }
}
Copier après la connexion

Distinction entre FirstOrInit et FirstOrCreate

Il est important de notez la distinction entre FirstOrInit et FirstOrCreate. Alors que les deux méthodes renvoient un pointeur vers un enregistrement existant ou nouvellement créé, FirstOrInit initialise uniquement la structure sans créer d'enregistrement, tandis que FirstOrCreate crée un enregistrement et l'interroge dans la structure.

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal