Rumah >pembangunan bahagian belakang >Golang >Fungsi SQL COALESCE tidak berfungsi dengan GORM

Fungsi SQL COALESCE tidak berfungsi dengan GORM

PHPz
PHPzke hadapan
2024-02-10 14:57:101016semak imbas

SQL COALESCE 函数不适用于 GORM

editor php Xinyi di sini untuk memperkenalkan kepada anda fungsi COALESCE dalam SQL. Fungsi COALESCE digunakan untuk mengembalikan nilai bukan-NULL pertama dalam senarai parameter. Walau bagaimanapun, perlu diambil perhatian bahawa apabila menggunakan GORM (rangka kerja ORM bahasa Go), fungsi COALESCE mungkin menyebabkan beberapa masalah. Ini kerana GORM memproses pernyataan pertanyaan secara berbeza daripada pernyataan SQL tradisional. Oleh itu, jika anda menghadapi masalah dengan fungsi COALESCE semasa menggunakan GORM, anda mungkin ingin mempertimbangkan penyelesaian lain.

Isi soalan

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

Ini ialah pertanyaan gorm untuk mengurus sisipan null apabila kami mengemas kini jadual. Jika nilai baharu (nilai masuk) adalah batal, saya ingin mengemas kini jadual dengan mengekalkan nilai sedia ada dalam jadual. Tetapi dalam kod saya, jadual dikemas kini secara normal, yang bermaksud kedua-dua nilai nol dan bukan nol mengemas kini secara normal. Saya harap seseorang boleh membantu saya

Saya juga mencuba pertanyaan mentah gorm. Tetapi ia tidak berkesan juga

ar.DB.Exec("UPDATE products SET size = COALESCE(?, size) WHERE product_code = ?", product.Size, product.Product_Code)

Penyelesaian

berpadu mengembalikan parameter pertama yang bukan nil.

Untuk ini anda perlu menyediakan petunjuk. Walau bagaimanapun, seperti yang anda boleh lihat daripada coretan kod dalam ulasan, tiada petunjuk diberikan. Oleh itu, semua medan yang dinyatakan akan dikemas kini.

Secara khusus, jenis products anda (atau apa sahaja nama yang dipanggil dalam program anda) sepatutnya kelihatan lebih seperti ini:

package domain

type products struct {
    product_code  int `gorm:"not null"`
    product_image *string
    size          *int
    color         *string
    unit_price    *float64
    stock         *int
}

Sila ambil perhatian bahawa medan ditakrifkan sebagai penunjuk.

Kemudian ia akan digunakan seperti ini:

newStock := 12
prod := domain.Products{    
    product_code: 42,   
    product_image: nil,     
    size: nil,  
    color: nil,     
    unit_price: nil,    
    stock: &newStock, 
}

Sine semua medan adalah nil,除了 stock 之外,只有 stock kecuali stock, hanya stock akan dikemas kini dalam pangkalan data.

Atas ialah kandungan terperinci Fungsi SQL COALESCE tidak berfungsi dengan GORM. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam