第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang GORM 搜索條件

Golang GORM 搜索條件

Go
繁花不似錦 2023-05-15 15:06:22
使用 gorm 和 postgres 在 Golang 中編寫網(wǎng)絡服務器時,我一直誤解了以下代碼中第二次循環(huán)迭代中到底發(fā)生了什么:...for _, t := range tasks {    newDbConn := db.SchoolServerDB.Debug().New()    err = newDbConn.Where("id = ?", t.DayID).First(&day).Error    if err != nil {        return errors.Wrapf(err, "Error query day with id='%v'", t.DayID)    }    ...}...第一次迭代調(diào)試:SELECT * FROM "days"  WHERE "days"."deleted_at" IS NULL AND ((id = '8')) ORDER BY "days"."id" ASC LIMIT 1第二次迭代調(diào)試:SELECT * FROM "days"  WHERE "days"."deleted_at" IS NULL AND "days"."id" = '8' AND ((id = '38')) ORDER BY "days"."id" ASC LIMIT 1關鍵問題是:盡管每次迭代都會創(chuàng)建一個新連接,但為什么搜索條件會累積?根據(jù)文檔,每次都必須清除搜索條件。我想得到這樣的第二個結果:SELECT * FROM "days"  WHERE "days"."deleted_at" IS NULL AND ((id = '38')) ORDER BY "days"."id" ASC LIMIT 1任何幫助表示贊賞!UPD:db.SchoolServerDb 只是 *gorm.DB 而 Debug() 是它的方法表 'days' 由結構 Day 組成:type Day struct {    gorm.Model    StudentID uint // parent id    Date string `sql:"size:255"`    Tasks []Task // has-many relation    Lessons []Lesson // has-many relation}
查看完整描述

1 回答

?
慕姐4208626

TA貢獻1852條經(jīng)驗 獲得超7個贊

您的Search Condition沒有問題。您只需在第二次迭代的查詢中提供多個 ID。一個在Where另一個在Find。


讓我寫一個像你這樣的例子


ids := []int{1, 2}

var org database.Organization

for _, i := range ids {

    db, _ := connection.NewPGConnection(info)

    db = db.Debug().New()

    db.Where("id = ?", i).Find(&org)

}

這里,第一次迭代的 SQL 查詢?nèi)缦拢?/p>


SELECT * FROM "organizations"  WHERE "organizations"."deleted_at" IS NULL AND ((id = '1'))

在第二次迭代中它將是:


SELECT * FROM "organizations"  WHERE "organizations"."deleted_at" IS NULL AND "organizations"."id" = '1' AND "organizations"."code" = 'mir' AND ((id = '2'))

為什么?因為,您使用了相同的變量day來讀取行結果。


第一次,沒關系。但是第二次,您的day 變量中已經(jīng)有一個 ID。并且您在Where. 這就是為什么,它的運行查詢有兩個 id。


您實際上提供了兩個id,一個在where子句中,另一個在中Find。


更改您的代碼以每次都重新聲明您的變量日。像這樣。


ids := []int{1, 2}

for _, i := range ids {

    db, _ := connection.NewPGConnection(info)

    db = db.Debug().New()

    var org database.Organization  // <----- move your variable day here

    db.Where("id = ?", i).Find(&org)

}

每次都會使用新的和干凈的變量。你的問題將得到解決。


謝謝。希望對你有幫助。



查看完整回答
反對 回復 2023-05-15
  • 1 回答
  • 0 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號