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

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

選擇與 GORM 一起存在

選擇與 GORM 一起存在

Go
Qyouu 2022-08-15 10:06:42
我想檢查數據庫表中是否存在行。我首先使用這種方法:type MyStruct struct {    ID    uint32    Key   string    Value string}var result MyStructerr := db.    Where("id = ? AND `key` = ? AND `value` = 0", myID, myKey).    First(&result).    Errorif err != nil {    if err == gorm.ErrRecordNotFound {        logrus.Error("ErrRecordNotFound")    }    logrus.Errorf("Other DB error: %s", err.Error())}但我想通過編寫原始 SQL 來實現此目的。我嘗試了以下操作:var result booldb.Raw("SELECT EXISTS(SELECT 1 FROM my_table WHERE id = ? AND `key` = ? AND `value` = ?)",    myID, myKey, "0").Scan(&result)但是我得到這個錯誤:unsupported destination, should be slice or struct.我也嘗試使用方法,并得到同樣的錯誤。Exec請注意,該變量是一個實例。db*gorm.DB
查看完整描述

5 回答

?
絕地無雙

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

您可以嘗試以下方法

var exists bool
err = db.Model(model).
         Select("count(*) > 0").
         Where("id = ?", id).
         Find(&exists).
         Error


查看完整回答
反對 回復 2022-08-15
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

如果你想避免ErrRecordNotFound錯誤,你可以使用Find like db。限制(1)。Find(&user),Find 方法同時接受結構和切片數據


r := db.

    Where("id = ? AND `key` = ? AND `value` = 0", myID, myKey).

    Limit(1).

    Find(&result)


r.Error

// handle error


exists := r.RowsAffected > 0


查看完整回答
反對 回復 2022-08-15
?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

你應該是一個結構或切片,而不是一個布爾。更多信息請點擊這里: https://gorm.io/docs/sql_builder.html#Raw-SQLresult


這應該有效:


var result struct {

  Found bool

}


db.Raw("SELECT EXISTS(SELECT 1 FROM my_table WHERE id = ? AND `key` = ? AND `value` = ?) AS found",

    myID, myKey, "0").Scan(&result)


查看完整回答
反對 回復 2022-08-15
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

您可以檢查是否存在的另一種方法是使用:Count


count := int64(0)

err := db.Model(&MyStruct{}).

    Where("id = ? AND key = ? AND value = 0", myID, myKey).

    Count(&count).

    Error

// handle error

exists := count > 0


查看完整回答
反對 回復 2022-08-15
?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

也許是一個遲到的回復,但我想分享我發現的答案,有可能直接掃描到一個布爾。變量的名稱應更改為大寫字母以實現此目的。


前任:


var Found bool


db.Raw("SELECT EXISTS(SELECT 1 FROM magic_table WHERE magic_field1 = ? AND magic_field2 = ? AND magic_field3 = ?) AS found",

    valOfMagicField1, valOfMagicField2, valOfMagicField3).Scan(&Found)   


查看完整回答
反對 回復 2022-08-15
  • 5 回答
  • 0 關注
  • 199 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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