Gorm 更新并在单个操作中获取更新的行?

有没有办法通过单个操作来获取已使用 Gorm 中的更新命令更新的行。



繁星淼淼
浏览 258回答 3
3回答

慕田峪7331174

我知道这已经有一百万年的历史了,但为了完成,这里采用 Gorm 的方法 -子句。    result := r.Gdb.Model(&User{}).Clauses(clause.Returning{}).Where("id = ?", "000-000-000").Updates(content)

慕标5832272

它并不漂亮,但由于您使用的是 postgres,您可以执行以下操作:realDB := db.DB()rows, err := realDB.Query("UPDATE some_table SET name = 'a' WHERE name = 'b' RETUNING id, name") //you could probably do db.Raw but I'm not sureif err != nil {    log.Fatal(err)}defer rows.Close()for rows.Next() {    var id int    var name string    err := rows.Scan(&id, &name)    if err != nil {        log.Fatal(err)    }    log.Println(id, name)}

白衣非少年

如果您知道要更新的行数相对较小(<1000),那么这是一个不错的解决方案var ids []intvar results []YourModel// Get the list of rows that will be affecteddb.Where("YOUR CONDITION HERE").Table("your_table").Select("id").Find(&ids)query := db.Where("id IN (?)", ids)// Do the updatequery.Model(&YourModel{}).Updates(YourModel{field: "value"})// Get the updated rowsquery.Find(&results)这对于竞争条件是安全的,因为它使用 ID 列表来执行更新而不是重复子句WHERE。正如您可以想象的那样,当您开始谈论数千行时,这变得不太实用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go