您好,登錄后才能下訂單哦!
這篇文章主要介紹了golang gorm更新日志執行SQL的方法的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇golang gorm更新日志執行SQL的方法文章都會有所收獲,下面我們一起來看看吧。
gorm.Open
返回類型為*gorm.DB
而不是gorm.DB
更新只會更新更改的字段
大多數應用程序不會受到影響,只有當您更改回調中的更新值(如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
,它已經被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,Field的名稱轉換為db名稱之前,只有那些來自golint的常見初始化(如HTTP
,URI
)是特殊處理的。
所以字段HTTP
的數據庫名稱將是http
而不是h_t_t_p
,但是一些其他的初始化,如SKU
不在golint,它的數據庫名稱將是s_k_u
,這看起來很丑陋,這個版本固定這個,任何大寫的初始化應該正確轉換。
錯誤RecordNotFound
已重命名為ErrRecordNotFound
mssql
驅動程序已從默認驅動程序中刪除,
導入它用import _ "github.com/jinzhu/gorm/dialects/mssql"
Hstore已移至github.com/jinzhu/gorm/dialects/postgres
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更新日志執行SQL的方法”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“golang gorm更新日志執行SQL的方法”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。