GORM을 사용하여 레코드 생성 또는 업데이트
GORM은 데이터베이스의 레코드를 관리하는 두 가지 방법인 FirstOrCreate() 및 FirstOrInit()를 제공합니다. 그러나 때로는 레코드 생성과 업데이트를 구별해야 하는 시나리오가 발생할 수 있습니다.
레코드 생성 확인
FirstOrCreate()는 레코드 기반 레코드 찾기를 시도합니다. 지정된 기준에 따라. 존재하는 경우 기존 레코드를 반환합니다. 존재하지 않는 경우 새 레코드를 생성하고 새로 생성된 레코드를 반환합니다.
레코드가 실제로 생성되었는지 확인하려면 트랜잭션에서 Create 메서드를 사용하면 됩니다. 거래가 성공하면 기록이 생성됩니다. 트랜잭션이 실패하면 해당 레코드가 이미 존재하고 생성되지 않았다는 의미입니다.
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 with GORM
GORM 1.20.x부터 편리한 기능 "Upsert"라는 기능을 사용할 수 있습니다. 이는 호환 가능한 "Upsert-On-Conflect" 메커니즘을 제공하여 CreateOrUpdateRecord의 기능을 결합합니다.
// 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)
이 쿼리는 다음과 같은 SQL 문으로 변환됩니다.
FirstOrInit 대 FirstOrCreate
FirstOrInit()에 유의하는 것이 중요합니다. FirstOrCreate()는 다른 용도로 사용됩니다. FirstOrInit()은 구조체를 초기화하지만 데이터베이스에 레코드를 생성하지 않습니다. 반면 FirstOrCreate()는 레코드를 생성한 다음 제공된 구조체에 쿼리합니다.
위 내용은 GORM에서 FirstOrCreate()와 FirstOrInit()를 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!