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)
coalesce nil
ではない最初のパラメータを返します。
これを行うには、ポインタを提供する必要があります。ただし、コメント内のコード スニペットからわかるように、ポインターは提供されていません。したがって、すべての 指定フィールドが更新されます。
具体的には、products
(またはプログラム内で呼ばれる名前) タイプは次のようになります。
リーリー
この場合、次のように使用されます:
リーリー
stock を除くすべてのフィールドが nil
であるため、データベース内で stock
のみが更新されます。
以上がSQL COALESCE 関数が GORM では機能しないの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。