Fungsi SQL COALESCE tidak berfungsi dengan GORM

PHPz
Lepaskan: 2024-02-10 14:57:10
ke hadapan
966 orang telah melayarinya

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),
})
Salin selepas log masuk

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)
Salin selepas log masuk

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
}
Salin selepas log masuk

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, 
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!