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
Linda Hamiltonoriginal
2024-11-09 16:20:02388parcourir

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)

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)
  }
}

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