GORM を使用したレコードの作成または更新: 総合ガイド
データベースを操作する場合、多くの場合、以下に基づいてレコードを作成または更新する必要があります。特定の条件。 GORM では、FirstOrCreate と FirstOrInit の 2 つのメソッドがレコードを管理するための柔軟なオプションを提供します。この記事では、これらの機能について説明し、両方のシナリオを効率的に処理するための代替アプローチを紹介します。
FirstOrCreate: 存在しない場合は作成、存在する場合は更新
FirstOrCreate メソッドは、次のことを同時にチェックします。データベースにレコードが存在します。レコードが見つからない場合は、渡されたモデルに基づいて新しいレコードを作成します。レコードが存在する場合、モデルで指定されているすべての値が更新されます。
FirstOrInit: レコードを作成せずに構造体を初期化する
FirstOrCreate とは対照的に、FirstOrInit メソッドは指定された条件に基づいてモデル構造体を初期化しますが、データベースにレコードは作成されません。これにより、必要に応じてレコードを作成する前にモデルをさらに変更できます。
代替アプローチ: 効率的な更新または作成
作成シナリオと更新シナリオの両方を管理するための代替アプローチ最初にアップデートを実行することです。更新の結果、レコードが見つからないというエラーが発生した場合は、代わりに新しいレコードを作成できます。このアプローチは、場合によっては、特に大規模なデータセットを扱う場合に、より効率的になる可能性があります。
if err := db.Model(&newUser).Where("id = ?", 3333).Update("name", "nick").Error; err != nil { // handle record not found error if gorm.IsRecordNotFoundError(err) { db.Create(&newUser) // create new record from newUser } }
FirstOrInit と FirstOrCreate の比較
FirstOrInit と FirstOrCreate は次の点に注意することが重要です。 FirstOrCreate はさまざまな目的を果たします。 FirstOrInit はモデル構造体を初期化しますが、レコードは作成しません。一方、FirstOrCreate はレコードを作成し、それにデータベースからのデータを設定します。
結論
GORM の FirstOrCreate メソッドと FirstOrInit メソッドデータベース内の存在に基づいてレコードを管理するための柔軟なアプローチを提供します。最初に更新して失敗時に挿入するという代替アプローチも、特定のシナリオでは効率的で実用的な解決策となる可能性があります。最適な選択は、アプリケーションの特定の要件と考慮事項によって異なります。
以上がFirstOrCreate と FirstOrInit: どちらの GORM メソッドを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。