diff --git a/backend/impls/dalgorm/dalgorm.go b/backend/impls/dalgorm/dalgorm.go index a3de4112386..ba3bcdb6181 100644 --- a/backend/impls/dalgorm/dalgorm.go +++ b/backend/impls/dalgorm/dalgorm.go @@ -236,6 +236,20 @@ func (d *Dalgorm) Create(entity interface{}, clauses ...dal.Clause) errors.Error // CreateWithMap insert record to database func (d *Dalgorm) CreateWithMap(entity interface{}, record map[string]interface{}) errors.Error { d.unwrapDynamic(&entity, nil) + if record != nil { + if id, ok := record["id"]; ok && id != nil { + var columns []string + for column := range record { + columns = append(columns, column) + } + return d.convertGormError(buildTx(d.db, nil).Model(entity).Clauses(clause.OnConflict{ + Columns: []clause.Column{{Name: "id"}}, + DoUpdates: clause.AssignmentColumns(columns), + }).Create(record).Error) + } else { + return d.convertGormError(buildTx(d.db, nil).Model(entity).Clauses(clause.OnConflict{UpdateAll: true}).Create(record).Error) + } + } return d.convertGormError(buildTx(d.db, nil).Model(entity).Clauses(clause.OnConflict{UpdateAll: true}).Create(record).Error) }