Rumah >pembangunan bahagian belakang >Golang >Fungsi SQL COALESCE tidak berfungsi dengan 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.
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)
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!