Sequelize-如何使用软删除行的主键添加/添加行

时间:2019-05-08 03:25:38

标签: sequelize.js upsert soft-delete

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

问题:是否有一种方法可以进行升级,如果对象已经存在于表中但被软删除,那么它将清除deleteAt列?

示例设置: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'
  })
})()

1 个答案:

答案 0 :(得分:0)

是的,但是您应该手动进行操作(例如,添加一个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'
  })
})()