实施 SequelizeJS 软删除的问题

Issues with implementing SequelizeJS soft deletion

我正在尝试在 SequelizeJS 中实现 'soft deletion'。因此,我将 'paranoid: true' 放入模型中,将 'deletedAt' 列放入迁移中。我尝试使用另一个问题中的 ,但由于版本不同,它没有用。另外,我不确定我是否正确编写了控制器。网上没有那么多信息,所以我不确定如何检查我是否做对了。我正在使用 Sequelize 5.3.0。 这是我的模型:

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Properties = sequelize.define('Properties', {
    name: {
      allowNull: false,
      type: DataTypes.STRING
    }
  }, {
    timestamps: true,
    paranoid: true
  });
  Properties.associate = function(models) {
    // associations can be defined here
    Properties.hasMany(models.Deals, {
      foreignKey: 'id',
      onDelete: 'CASCADE'
    })
  };
  return Properties;
};

这是我的迁移:

'use strict';
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('Properties', {
      id: {
        allowNull: false,
        primaryKey: true,
        type: Sequelize.INTEGER,
        autoIncrement: true
      },
      name: {
        allowNull: false,
        type: Sequelize.STRING
      }
      deletedAt: {
        type: Sequelize.DATE
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('Properties');
  }
};

我从官方文档中找到了 this 解决方案,但对我来说没有意义:

User.findAll({
    include: [{
        model: Tool,
        where: { name: { [Op.like]: '%ooth%' } },
        paranoid: false // query and loads the soft deleted records
    }]
});

我的 getAllProperties 控制器:

getAllProperties: (req, res, next) => {
    return Properties
    .all()
    .then(properties => res.status(200).json({ status: 'Retrieved all properties', properties }))
    .catch(error => console.log(error));
  }

我的 destroyProperty 控制器:

destroyProperty: (req, res, next) => {
  const { id } = req.params;
  return Properties
  .findById(id)
  .then(property => {
    if (!property) {
      return res.status(404).send({ message: 'Property not found' })
    }
    return property
    .destroy()
    .then(() => res.status(200).json({ status: 'Deleted one property', property }))
    .catch(error => console.log(error));
  })
}

我想通了,我的模型和迁移都很好,问题是我在做 sequelize db:migrate:undo:allsequelize db:migrate,但数据库模式保持不变。所以,我做了 sequelize db:dropsequelize db:create 然后它开始创建这个字段。 另外,我更改了 getAllProperties 控制器:

getAllProperties: (req, res, next) => {
  return Properties
  .findAll({paranoid: false})
  .then(properties => res.status(200).json({ status: 'Retrieved all properties', properties }))
  .catch(error => console.log(error));
}

在我改变了所有这些之后,它开始工作了。