在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO  網(wǎng)絡(luò)安全/ gorm使用update更新數(shù)據(jù)庫(postgresql)布爾值

gorm使用update更新數(shù)據(jù)庫(postgresql)布爾值

問題描述 :

今天早上遇到的問題,一上午了,還是沒有找出來是什么問題。特來問問
目的:使用gorm修改數(shù)據(jù)庫表中的某個字段布爾值

先上代碼:

func ChangeActive(id int) (*models.Comment, error) {
    var (
        model     *models.Comment
        pre_model models.PreComment
        err       error
    )

    //先將需要修改的數(shù)據(jù)查詢出來
    err = common.DB.Where("id = ?", id).First(&model).Error
    if err != nil {
        return nil, err
    }
    //將布爾值取反
    model.IsActive = !model.IsActive
    //更新數(shù)據(jù)庫的值
    common.DB.Model(&model).Updates(&model)

    if !model.IsActive {
        pre_model.Create(common.DB)
    }

    return model, err
}
此函數(shù)接收一個ID,在數(shù)據(jù)庫查詢出ID對應(yīng)的數(shù)據(jù),修改這條數(shù)據(jù)的active字段將它取反。最后再更新數(shù)據(jù)庫。

遇到的Bug:布爾值一直更新不過來。

排查過程:起初我以為是代碼語句哪里寫錯了,就使用了goland的Debug模式,發(fā)現(xiàn)代碼并沒有問題。

接下來我就驗(yàn)證:將代碼在更新數(shù)據(jù)表之前修改了另外一個字段(model.CompanyID = 3)查看是否修改成功。結(jié)果是修改成功,但是布爾值還是沒變。

回答
編輯回答
挽歌
  • 如果是零值,那么Updates方法就不會更新這字段,而布爾值的零值是false。
  • 辦法一: 把屬性從bool改為*bool
  • 辦法二: 使用其他的update方法。
2017年7月27日 22:50