Rumah >pembangunan bahagian belakang >Golang >golang gorm kemas kini dan kembali
Dalam projek golang saya, saya menggunakan gorm dan saya perlu membuat pertanyaan upsert menggunakan klausa pulangan untuk mendapatkan nilai yang diubah suai daripada pertanyaan. Saya boleh melakukan upsert, tetapi saya tidak tahu bagaimana untuk menyambung klausa pulangan kepadanya. Nama jadual ialah pembilang, dan kodnya adalah seperti berikut:
te := struct { name string //key column counter int }{ name: "name_to_update", counter: 2, } db. //model(te). clauses( //clause.returning{columns: []clause.column{{name: "counter"}}}, clause.onconflict{ columns: []clause.column{{name: "name"}}, // key column doupdates: clause.assignments(map[string]interface{}{ "counter": gorm.expr("counters.counter + ?", 1), }), }, ).create(&te)
Pertanyaan sql yang dihasilkan ialah:
INSERT INTO "counters" ("counter", "name") VALUES (0, "name_to_update") ON CONFLICT ("name") DO UPDATE SET "counter"=counters.counter + 1 RETURNING "name" //I need updated counter value here, not name
Jadi kaunter dikemas kini, yang tidak ada masalah, tetapi apabila saya memerlukan nilai kemas kini kaunter, ia mengembalikan lajur kunci (dalam pemulangan). Sebarang idea bagaimana untuk membetulkannya? Terima kasih
Saya tidak pasti sama ada struktur tanpa nama menyebabkan masalah.
Selain itu, kod anda tidak jelas dari mana nama jadual - "kaunter" - berasal.
Saya telah mencuba penyelesaian anda - tetapi menggunakan struktur khusus untuk model - dan ia berfungsi dengan baik.
type counter struct { name string `gorm:"primarykey"` counter int } ... counter := counter{name: "name_to_update", counter: 2} db. clauses( clause.returning{columns: []clause.column{{name: "counter"}}}, clause.onconflict{ columns: []clause.column{{name: "name"}}, doupdates: clause.assignments(map[string]interface{}{ "counter": gorm.expr("counters.counter + ?", 1), }), }, ).create(&counter) fmt.println(counter.counter)
Kod di atas menjana sql berikut
INSERT INTO "counters" ("name","counter") VALUES ('name_to_update',10) ON CONFLICT ("name") DO UPDATE SET "counter"=counters.counter + 1 RETURNING "counter"
dan counter.counter
mempunyai nilai kemas kini yang betul.
Atas ialah kandungan terperinci golang gorm kemas kini dan kembali. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!