Heim >Backend-Entwicklung >Golang >Die SQL COALESCE-Funktion funktioniert nicht mit GORM

Die SQL COALESCE-Funktion funktioniert nicht mit GORM

PHPz
PHPznach vorne
2024-02-10 14:57:101046Durchsuche

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),
})

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)

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
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen