溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang?gorm更新日志執(zhí)行SQL的方法

發(fā)布時間:2022-04-16 09:16:26 來源:億速云 閱讀:174 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹了golang gorm更新日志執(zhí)行SQL的方法的相關知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇golang gorm更新日志執(zhí)行SQL的方法文章都會有所收獲,下面我們一起來看看吧。

1. 更新日志

1.1. v1.0

1.1.1. 破壞性變更

  • gorm.Open返回類型為*gorm.DB而不是gorm.DB

  • 更新只會更新更改的字段

大多數(shù)應用程序不會受到影響,只有當您更改回調(diào)中的更新值(如BeforeSave,BeforeUpdate)時,應該使用scope.SetColumn,例如:

func (user *User) BeforeUpdate(scope *gorm.Scope) {
  if pw, err := bcrypt.GenerateFromPassword(user.Password, 0); err == nil {
    scope.SetColumn("EncryptedPassword", pw)
    // user.EncryptedPassword = pw  // 不工作,更新時不會包括EncryptedPassword字段
  }
}
  • 軟刪除的默認查詢作用域只會檢查deleted_at IS NULL

之前它會檢查deleted_at小于0001-01-02也排除空白時間,如:

SELECT * FROM users WHERE deleted_at IS NULL OR deleted_at <= '0001-01-02'

但是沒有必要,如果你使用*time.Time作為模型的DeletedAt,它已經(jīng)被gorm.Model使用了,所以SQL就足夠了

SELECT * FROM users WHERE deleted_at IS NULL

所以如果你使用gorm.Model,那么你是好的,沒有什么需要改變,只要確保所有記錄的空白時間為deleted_at設置為NULL,示例遷移腳本:

import (
    "github.com/jinzhu/now"
)

func main() {
  var models = []interface{}{&User{}, &Image{}}
  for _, model := range models {
    db.Unscoped().Model(model).Where("deleted_at < ?", now.MustParse("0001-01-02")).Update("deleted_at", gorm.Expr("NULL"))
  }
}
  • 新的ToDBName邏輯

在GORM將struct,F(xiàn)ield的名稱轉(zhuǎn)換為db名稱之前,只有那些來自golint的常見初始化(如HTTP,URI)是特殊處理的。

所以字段HTTP的數(shù)據(jù)庫名稱將是http而不是h_t_t_p,但是一些其他的初始化,如SKU不在golint,它的數(shù)據(jù)庫名稱將是s_k_u,這看起來很丑陋,這個版本固定這個,任何大寫的初始化應該正確轉(zhuǎn)換。

錯誤RecordNotFound已重命名為ErrRecordNotFound

mssql驅(qū)動程序已從默認驅(qū)動程序中刪除,

導入它用import _ "github.com/jinzhu/gorm/dialects/mssql"

Hstore已移至github.com/jinzhu/gorm/dialects/postgres

gorm執(zhí)行sql

type Object interface {
  GroupOrderOpenlog() (uidList []int)
}
func (o *object) GroupOrderOpenlog() {
	type res struct {
		Uid int `json:"uid"`
	}
	var re []res
	sql:= "SELECT uid FROM order_openlog  GROUP BY uid"
	o.Db.Raw(sql).Scan(&re)
	fmt.Println(re)
	for _,k :=range re{
		fmt.Println(k.Uid)
	}
}

關于“golang gorm更新日志執(zhí)行SQL的方法”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“golang gorm更新日志執(zhí)行SQL的方法”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI