golang?gorm更新日志執(zhí)行SQL示例詳解
1. 更新日志
1.1. v1.0
1.1.1. 破壞性變更
- gorm.Open返回類(lèi)型為
*gorm.DB而不是gorm.DB - 更新只會(huì)更新更改的字段
大多數(shù)應(yīng)用程序不會(huì)受到影響,只有當(dāng)您更改回調(diào)中的更新值(如BeforeSave,BeforeUpdate)時(shí),應(yīng)該使用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 // 不工作,更新時(shí)不會(huì)包括EncryptedPassword字段
}
}
軟刪除的默認(rèn)查詢(xún)作用域只會(huì)檢查deleted_at IS NULL
之前它會(huì)檢查deleted_at小于0001-01-02也排除空白時(shí)間,如:
SELECT * FROM users WHERE deleted_at IS NULL OR deleted_at <= '0001-01-02'
但是沒(méi)有必要,如果你使用*time.Time作為模型的DeletedAt,它已經(jīng)被gorm.Model使用了,所以SQL就足夠了
SELECT * FROM users WHERE deleted_at IS NULL
所以如果你使用gorm.Model,那么你是好的,沒(méi)有什么需要改變,只要確保所有記錄的空白時(shí)間為deleted_at設(shè)置為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的名稱(chēng)轉(zhuǎn)換為db名稱(chēng)之前,只有那些來(lái)自golint的常見(jiàn)初始化(如HTTP,URI)是特殊處理的。
所以字段HTTP的數(shù)據(jù)庫(kù)名稱(chēng)將是http而不是h_t_t_p,但是一些其他的初始化,如SKU不在golint,它的數(shù)據(jù)庫(kù)名稱(chēng)將是s_k_u,這看起來(lái)很丑陋,這個(gè)版本固定這個(gè),任何大寫(xiě)的初始化應(yīng)該正確轉(zhuǎn)換。
錯(cuò)誤RecordNotFound已重命名為ErrRecordNotFound
mssql驅(qū)動(dòng)程序已從默認(rèn)驅(qū)動(dòng)程序中刪除,
導(dǎo)入它用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示例詳解的詳細(xì)內(nèi)容,更多關(guān)于golang gorm更新日志執(zhí)行SQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go語(yǔ)言使用組合的思想實(shí)現(xiàn)繼承
這篇文章主要為大家詳細(xì)介紹了在 Go 里面如何使用組合的思想實(shí)現(xiàn)“繼承”,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的可以了解一下2022-12-12
如何使用golang實(shí)現(xiàn)traceroute
這篇文章主要介紹了如何使用golang實(shí)現(xiàn)traceroute,該工具在linux環(huán)境下的命令是traceroute或者tracepath,在windows下命令是tracert,本文給大家詳細(xì)講解需要的朋友可以參考下2023-04-04
Go 語(yǔ)言 IDE 中的 VSCode 配置使用教程
Gogland 是 JetBrains 公司推出的Go語(yǔ)言集成開(kāi)發(fā)環(huán)境。這篇文章主要介紹了Go 語(yǔ)言 IDE 中的 VSCode 配置使用教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
Go Gin框架中的binding驗(yàn)證器使用小結(jié)
Gin框架中的binding驗(yàn)證器為我們提供了簡(jiǎn)便的數(shù)據(jù)綁定和驗(yàn)證功能,通過(guò)合理使用binding和validate標(biāo)簽,我們可以確保API接口的數(shù)據(jù)合法性和完整性,這篇文章主要介紹了Go Gin框架中的binding驗(yàn)證器使用指南,需要的朋友可以參考下2024-07-07
golang 40行代碼實(shí)現(xiàn)通用協(xié)程池
golang協(xié)程機(jī)制很方便的解決了并發(fā)編程的問(wèn)題,但是協(xié)程并不是沒(méi)有開(kāi)銷(xiāo)的,所以也需要適當(dāng)限制一下數(shù)量。這篇文章主要介紹了golang 40行代碼實(shí)現(xiàn)通用協(xié)程池,需要的朋友可以參考下2018-08-08
golang通過(guò)http訪問(wèn)外部網(wǎng)址的操作方法
這篇文章主要介紹了golang通過(guò)http訪問(wèn)外部網(wǎng)址的操作方法,分為?get方式訪問(wèn)外部的接口,Post方式請(qǐng)求外部接口,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-02-02

