1 回答

TA貢獻1815條經驗 獲得超13個贊
原因
GORM 查看提供給 的結構的字段,并檢查是否設置了哪些字段,以構造查詢。因此,在第二個示例中,它看到設置為 ,并向查詢中添加一個 WHERE 子句:Find()Completedtrue
db.Debug().Model(&Task{}).Find(&ret, Task{Completed: true})
生成:
SELECT * FROM "tasks" WHERE "tasks"."completed" = true
在第二個例子中,GORM無法知道你是否傳入或僅僅是因為 是 一個 的零值。Task{Completed: false}Task{}falsebool
如果您有一個字段是 一個 并嘗試查詢 :int0
db.Debug().Model(&Task{}).Find(&ret, Task{Num: 0}) // Generates: SELECT * FROM 'tasks'
溶液
如果確實要將結構用于查詢,則可以更改模型,使其為 .由于指針的零值為 nil,因此提供指向 false 的指針將告訴 GORM 添加該子句:Completed*boolbool
trueBool := true
falseBool := false
db.Debug().Model(&Task{}).Find(&ret, Task{Completed: &falseBool})
db.Debug().Model(&Task{}).Find(&ret, Task{Completed: &trueBool})
生成(分別)
SELECT * FROM "tasks" WHERE "tasks"."completed" = false
SELECT * FROM "tasks" WHERE "tasks"."completed" = true
請記住,這樣做意味著可以將其保存在數據庫中,就像未設置一樣。CompletedNULL
- 1 回答
- 0 關注
- 275 瀏覽
添加回答
舉報