ホームページ  >  記事  >  バックエンド開発  >  SQL COALESCE 関数が GORM では機能しない

SQL COALESCE 関数が GORM では機能しない

PHPz
PHPz転載
2024-02-10 14:57:10967ブラウズ

SQL COALESCE 函数不适用于 GORM

php エディタ Xinyi は、SQL の COALESCE 関数を紹介します。 COALESCE 関数は、パラメータ リスト内の最初の非 NULL 値を返すために使用されます。ただし、GORM (Go 言語 ORM フレームワーク) を使用する場合、COALESCE 関数によって問題が発生する可能性があることに注意してください。これは、GORM が従来の SQL ステートメントとは異なるクエリ ステートメントを処理するためです。したがって、GORM の使用時に COALESCE 関数で問題が発生した場合は、他の解決策を検討することをお勧めします。

質問内容

db.model(&domain.products{}).where("product_code", product.product_code).
updates(map\[string\]interface{}{
"product_image": gorm.expr("coalesce(?, products.product_image)", product.product_image),
"size":          gorm.expr("coalesce(?, products.size)", product.size),
"color":         gorm.expr("coalesce(?, products.color)", product.color),
"unit_price":    gorm.expr("coalesce(?, products.unit_price)", product.unit_price),
"stock":         gorm.expr("coalesce(?, products.stock)", product.stock),
})

これは、テーブルを更新するときに null 挿入を管理するための gorm クエリです。 新しい値(受信値)がnullの場合、テーブル内の既存の値を保持してテーブルを更新したい。 しかし、私のコードでは、テーブルは正常に更新されます。つまり、null 値と非 null 値の両方が正常に更新されます。誰かが私を助けてくれることを願っています

gorm rawクエリも試してみました。しかしそれもうまくいきません

ar.DB.Exec("UPDATE products SET size = COALESCE(?, size) WHERE product_code = ?", product.Size, product.Product_Code)

Solution

coalesce nil ではない最初のパラメータを返します。

これを行うには、ポインタを提供する必要があります。ただし、コメント内のコード スニペットからわかるように、ポインターは提供されていません。したがって、すべての 指定フィールドが更新されます。

具体的には、products (またはプログラム内で呼ばれる名前) タイプは次のようになります。 リーリー

フィールドはポインターとして定義されることに注意してください。

この場合、次のように使用されます:

リーリー

stock

を除くすべてのフィールドが nil であるため、データベース内で stock のみが更新されます。

以上がSQL COALESCE 関数が GORM では機能しないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。