Sequelize.js Sequelize-如何使用软删除行的相同主键添加/升级行

Sequelize.js Sequelize-如何使用软删除行的相同主键添加/升级行,sequelize.js,upsert,soft-delete,Sequelize.js,Upsert,Soft Delete,我正在使用sequelize ORM。我有一个表格模型,其中我们通过paranoid:true启用了软删除 问题:是否有方法进行upsert,以便在对象已存在于表中但被软删除时,只清除deletedAt列 示例设置:model.js const Sequelize = require('sequelize') const sequelize = new Sequelize( dbName, username, password, { host, dialect:

我正在使用sequelize ORM。我有一个表格模型,其中我们通过
paranoid:true
启用了软删除

问题:是否有方法进行upsert,以便在对象已存在于表中但被软删除时,只清除deletedAt列

示例设置:
model.js

const Sequelize = require('sequelize')
const sequelize = new Sequelize(
  dbName,
  username,
  password,
  {
    host,
    dialect: 'mysql',
    port
  }
)

const model =  sequelize.define(
  'sample_table',
  {
    uid: {
      type: Sequelize.STRING(60),
      allowNull: false
      primaryKey: true
    },
    deletedAt: {
      type: Sequelize.Date,
      allowNull: true,
      default: null
    }
  },
  {
    tableName: 'sample_table'
    deletedAt: true,
    paranoid: true
  }
)
示例用法:

const model = require('./model.js')

(async () => {
  const myModel = await model.create({
    uid: 'sample-uid'
  })

  await myModel.destroy()

  // error is encountered because uid already exists
  await model.create({
    uid: 'sample-uid'
  })
})()


可以,但您应该手动执行此操作(例如,添加一个catch以创建方法,并使用
.restore()
清除deletedAt列)

或者您可以在uid+deletedAt上添加主键,代码应该可以正常工作

const model = require('./model.js')

(async () => {
  const myModel = await model.create({
    uid: 'sample-uid'
  })

  await myModel.destroy()

  // if primary key uid and deletedAt then no error here
  await model.create({
    uid: 'sample-uid'
  })
})()

谢谢最后我做了你的第一个建议。实际上,对于关联生成的方法,我在原型中扩展了生成方法的功能。第二个建议也适用于我的案例,因为它不适用于高度填充的表。