php-Editor Xinyi ist hier, um Ihnen die COALESCE-Funktion in SQL vorzustellen. Die Funktion COALESCE wird verwendet, um den ersten Nicht-NULL-Wert in der Parameterliste zurückzugeben. Es ist jedoch zu beachten, dass bei Verwendung von GORM (Go Language ORM Framework) die COALESCE-Funktion einige Probleme verursachen kann. Dies liegt daran, dass GORM Abfrageanweisungen anders verarbeitet als herkömmliche SQL-Anweisungen. Wenn bei der Verwendung von GORM Probleme mit der COALESCE-Funktion auftreten, sollten Sie daher möglicherweise andere Lösungen in Betracht ziehen.
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), })
Dies ist eine Gorm-Abfrage zum Verwalten von Nulleinfügungen, wenn wir die Tabelle aktualisieren. Wenn der neue Wert (eingehender Wert) null ist, möchte ich die Tabelle aktualisieren, indem ich die vorhandenen Werte in der Tabelle beibehalte. Aber in meinem Code wird die Tabelle normal aktualisiert, was bedeutet, dass sowohl Null- als auch Nicht-Null-Werte normal aktualisiert werden. Ich hoffe, jemand kann mir helfen
Ich habe auch Gorm Raw Query ausprobiert. Aber es funktioniert auch nicht
ar.DB.Exec("UPDATE products SET size = COALESCE(?, size) WHERE product_code = ?", product.Size, product.Product_Code)
coalesce gibt den ersten Parameter zurück, der nicht nil
ist.
Hierfür müssen Sie Hinweise geben. Wie Sie dem Codeausschnitt in den Kommentaren entnehmen können, werden jedoch keine Hinweise bereitgestellt. Daher werden alle angegebenen Felder aktualisiert.
Konkret sollte Ihr products
-Typ (oder wie auch immer er in Ihrem Programm heißt) eher so aussehen:
package domain type products struct { product_code int `gorm:"not null"` product_image *string size *int color *string unit_price *float64 stock *int }
Bitte beachten Sie, dass Felder als Zeiger definiert sind.
Dann würde es so verwendet werden:
newStock := 12 prod := domain.Products{ product_code: 42, product_image: nil, size: nil, color: nil, unit_price: nil, stock: &newStock, }
Da alle Felder nil
,除了 stock
之外,只有 stock
außer stock
sind, wird nur stock
in der Datenbank aktualisiert.
Das obige ist der detaillierte Inhalt vonDie SQL COALESCE-Funktion funktioniert nicht mit GORM. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!