ホームページ >バックエンド開発 >Golang >FirstOrCreate と Upsert: レコードの作成または更新にはどちらの GORM メソッドを使用する必要がありますか?

FirstOrCreate と Upsert: レコードの作成または更新にはどちらの GORM メソッドを使用する必要がありますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-09 16:20:02391ブラウズ

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

GORM を使用したレコードの作成または更新: FirstOrCreate と Upsert

GORM には、レコードを作成または更新するための 2 つのメソッド (FirstOrCreate と FirstOrInit) が用意されています。ただし、レコードが実際にこれらのメソッドを使用して作成されたかどうかを判断するのは困難な場合があります。

GORM 1.20.x 以降での Upsert サポート

バージョン 1.20.x 以降, GORM では、OnConflict 句を通じて互換性のある Upsert サポートが導入されています。これにより、異なるデータベースでレコードを更新/挿入することができます。

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

GORM 1.9.x 以降の代替アプローチ

GORM の以前のバージョンでは、レコードを作成する効率的な方法または、レコードを更新するには、まず更新を試行し、レコードが更新されない場合は挿入を続けます。

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

FirstOrInit と FirstOrCreate の違い

FirstOrInit と FirstOrCreate の違いに注意することが重要です。どちらのメソッドも既存のレコードまたは新しく作成されたレコードへのポインターを返しますが、FirstOrInit はレコードを作成せずに構造体を初期化するだけですが、FirstOrCreate はレコードを作成して構造体にクエリします。

以上がFirstOrCreate と Upsert: レコードの作成または更新にはどちらの GORM メソッドを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。