Erstellen oder aktualisieren Sie einen Datensatz mit GORM
GORM bietet zwei Methoden zum Verwalten von Datensätzen in Ihrer Datenbank: FirstOrCreate() und FirstOrInit(). Manchmal kann es jedoch vorkommen, dass Sie zwischen dem Erstellen und Aktualisieren eines Datensatzes unterscheiden müssen.
Auf Datensatzerstellung prüfen
FirstOrCreate() versucht, einen Datensatz basierend auf zu finden nach den vorgegebenen Kriterien. Wenn er vorhanden ist, wird der vorhandene Datensatz zurückgegeben. Wenn er nicht vorhanden ist, wird ein neuer Datensatz erstellt und der neu erstellte zurückgegeben.
Um zu überprüfen, ob ein Datensatz tatsächlich erstellt wurde, können Sie die Create-Methode in einer Transaktion verwenden. Wenn die Transaktion erfolgreich ist, wurde der Datensatz erstellt. Wenn die Transaktion fehlschlägt, bedeutet das, dass der Datensatz bereits existierte und nicht erstellt wurde.
func CreateOrUpdateRecord(tx *gorm.DB, record *Model) error { if err := tx.Create(record).Error; err != nil { return err // Record already exists } return nil // Record created }
Upsert mit GORM
Ab GORM 1.20.x eine praktische Funktion namens „Upsert“ ist verfügbar. Es kombiniert die Funktionalität von CreateOrUpdateRecord, indem es einen kompatiblen „Upsert-On-Conflict“-Mechanismus bereitstellt.
// Update columns to new value on `id` conflict tx.Clauses(clause.OnConflict{ Columns: []clause.Column{{Name: "id"}}, // key column DoUpdates: clause.AssignmentColumns([]string{"name", "age"}), // columns needed to be updated }).Create(&users)
Diese Abfrage wird in SQL-Anweisungen übersetzt wie:
FirstOrInit vs . FirstOrCreate
Es ist wichtig zu beachten, dass FirstOrInit() und FirstOrCreate() unterschiedliche Zwecke erfüllen. FirstOrInit() initialisiert eine Struktur, erstellt jedoch keinen Datensatz in der Datenbank. FirstOrCreate() hingegen erstellt einen Datensatz und fragt ihn dann in der bereitgestellten Struktur ab.
Das obige ist der detaillierte Inhalt vonWann sollte ich FirstOrCreate() vs. FirstOrInit() in GORM verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!