Maison > Article > développement back-end > Comment fonctionne la fonctionnalité Upsert de GORM par rapport à FirstOrCreate et FirstOrInit ?
Dans GORM, les méthodes FirstOrCreate et FirstOrInit peuvent être utilisées pour récupérer ou créer un enregistrement de base de données. Cependant, il peut être difficile de déterminer si un enregistrement a été récemment créé ou mis à jour.
Solution Upsert avec Upsert-On-Conflict
À partir de GORM 1.20.x, une fonctionnalité améliorée La fonctionnalité Upsert est introduite, qui utilise les capacités de gestion des conflits pour diverses bases de données.
// Update columns when conflict on id DB.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "id"}}, DoUpdates: clause.AssignmentColumns([]string{"name", "age"}), }).Create(&users)
Cet extrait se traduit en instructions SQL telles que :
Solution de secours pour les anciens GORM Versions
Pour les versions GORM antérieures à 1.9.x, une approche plus efficace consiste à tenter d'abord une mise à jour, puis à créer un nouvel enregistrement si aucune correspondance n'est trouvée.
// Update only set name=nick if err := db.Model(&newUser).Where("id = ?", 3333).Update("name", "nick").Error; err != nil { // Handle error... if gorm.IsRecordNotFoundError(err) { db.Create(&newUser) // Create new record from newUser } }
Distinction entre FirstOrInit et FirstOrCreate
Bien que les deux méthodes aient un objectif similaire, leur comportement est distinct :
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!