How to Create or Update a record with GORM?

前端 未结 7 1390
悲&欢浪女
悲&欢浪女 2021-01-05 04:21

Gorm has a FirstOrCreate method and a FirstOrInit but how to check afterwards if the record was actually created? I like to create a record if it d

7条回答
  •  猫巷女王i
    2021-01-05 04:59

    func CreateOrUpdate(db *gorm.DB, model interface{}, where interface{}, update interface{}) (interface{}, error) {
        var result interface{}
        err := db.Model(model).Where(where).First(result).Error
        if err != nil {
            if !errors.Is(err, gorm.ErrRecordNotFound) {
                return nil, err
            } else {
                //insert
                if err = db.Model(model).Create(update).Error; err != nil {
                    return nil, err
                }
            }
        }
        //not update some field
        reflect.ValueOf(update).Elem().FieldByName("someField").SetInt(0)
        if err = db.Model(model).Where(where).Updates(update).Error; err != nil {
            return nil, err
        }
        return update, nil
    }
    

提交回复
热议问题