ホームページ  >  記事  >  バックエンド開発  >  GORM の Upsert 機能は FirstOrCreate や FirstOrInit と比較してどのように動作しますか?

GORM の Upsert 機能は FirstOrCreate や FirstOrInit と比較してどのように動作しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-10 00:52:02654ブラウズ

How Does GORM's Upsert Feature Work Compared to FirstOrCreate and FirstOrInit?

Upsert: GORM での作成または更新

GORM では、FirstOrCreate メソッドと FirstOrInit メソッドの両方を使用してデータベース レコードを取得または作成できます。ただし、レコードが新しく作成されたのか更新されたのかを判断するのは不明確な場合があります。

Upsert-On-Conflict を使用した Upsert ソリューション

GORM 1.20.x 以降、強化されたさまざまなデータベースの競合処理機能を利用する Upsert 機能が導入されました。

このスニペット次のような SQL ステートメントに変換されます:

  • SQL Server: MERGE INTO "users" USING *** WHEN NOT MATCHED THEN INSERT *** WHEN MATCHED THEN UPDATE SET "name"="excluded"."name";
  • PostgreSQL: INSERT INTO "users" *** ON CONFLICT ("id") DO UPDATE SET "name"="excluded "。"名前"、 "age"="excluded"."age";
  • MySQL: INSERT INTO 'users' *** ON DUPLICATE KEY UPDATE 'name'=VALUES(name),'age= VALUES(age);

古い GORM のフォールバック ソリューションバージョン

1.9.x より前の GORM バージョンの場合、より効率的なアプローチは、まず更新を試み、一致するものが見つからない場合は新しいレコードを作成することです。

FirstOrInit と FirstOrCreate の区別

どちらのメソッドも目的は似ていますが、動作は異なります。

  • FirstOrInit: レコードが存在しない場合は構造体を初期化しますが、レコードは作成しません。
  • FirstOrCreate: レコードが存在する場合は作成します。存在しないため、レコードを構造体に取得します。

以上がGORM の Upsert 機能は FirstOrCreate や FirstOrInit と比較してどのように動作しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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