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

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

PHPz
リリース: 2024-02-10 14:57:10
転載
1012 人が閲覧しました

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート