Die SQL COALESCE-Funktion funktioniert nicht mit GORM

PHPz
Freigeben: 2024-02-10 14:57:10
nach vorne
966 Leute haben es durchsucht

SQL COALESCE 函数不适用于 GORM

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.

Frageninhalt

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),
})
Nach dem Login kopieren

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)
Nach dem Login kopieren

Solution

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
}
Nach dem Login kopieren

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, 
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!