亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Golang Gorm:構造不同的相同查詢會拋出不同的結果

Golang Gorm:構造不同的相同查詢會拋出不同的結果

Go
海綿寶寶撒 2022-12-19 19:25:28
我想運行以下查詢:SELECT *FROM artistsWHERE name LIKE '%roll%';該WHERE子句將是動態的,這意味著我將遍歷映射以構建它并將其鏈接到主查詢。話雖如此,在嘗試迭代之前,我考慮過測試方法鏈(我是 Gorm 的新手)所以我運行了:var artist entities.Artistquery := as.db.Model(&artist)query.Where("name LIKE ?", "%roll%")if err := query.Find(&as.Artists).Error; err != nil {    return err}如您所見,我鏈接了查詢的不同部分并使用Find. 這將返回表中的所有元素。打印出執行的查詢后,我得到:SELECT * FROM `artists`  WHERE `artists`.`deleted_at` IS NULL沒有提到該LIKE條款,此外,我不知道從哪里來deleted_at IS NULL。盡管目前這并不重要,因為最終我也會將其添加到查詢中。但是如果我跑:var artist entities.Artistquery := as.db.Model(&artist)if err := query.Where("name LIKE ?", "%roll%").Find(&as.Artists).Error; err != nil {    return err}我得到了我期待的結果。執行的查詢是:SELECT * FROM `artists`  WHERE `artists`.`deleted_at` IS NULL AND ((name LIKE '%roll%')) 知道發生了什么事嗎?
查看完整描述

2 回答

?
九州編程

TA貢獻1785條經驗 獲得超4個贊

我不知道deleted_at IS NULL從哪里來


您可能正在擴展您的模型,gorm.Model其中包含DeleteAt導致deleted_at IS NULL被添加到查詢中的字段。DeleteAt用于檢查記錄是否被刪除,然后不將其包含在結果中


沒有提到 LIKE 子句


var artist entities.Artist


query := as.db.Model(&artist)


query.Where("name LIKE ?", "%roll%") <- will return new query

if err := query.Find(&as.Artists).Error; err != nil {

    return err

}

正如 Bill 指出的那樣Where,返回具有修改條件的新查詢,但是由于您沒有為其分配任何內容,因此不會將其添加到查詢中


var artist entities.Artist


query := as.db.Model(&artist)


if err := query.Where("name LIKE ?", "%roll%").Find(&as.Artists).Error; err != nil {

    return err

}

在這里,您使用Find的是新返回的查詢,其中包含條件,因此它按預期工作。


要在查詢中鏈接多個 where 條件,您可以通過多種方式實現:


1:


var artist entities.Artist


query := as.db.Model(&artist)


query = query.Where("name LIKE ?", "%roll%")


if err := query.Find(&as.Artists).Error; err != nil {

    return err

}

2:


var artist entities.Artist


query := as.db.Model(&artist)


err := query.

          Where("name LIKE ?", "%roll%").

          Where("name LIKE ?", "%m%").

          Find(&as.Artists).

          Error

if err != nil {

    return err

}


查看完整回答
反對 回復 2022-12-19
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

query.Where()文檔(https://gorm.io/docs/query.html )中使用的所有示例都顯示了鏈接,就像您的第二個示例一樣。

我的結論是Where()不修改實例的 SQL query,它返回一個包含條件的新查詢實例。


查看完整回答
反對 回復 2022-12-19
  • 2 回答
  • 0 關注
  • 488 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號