【问题标题】:Issues with implementing SequelizeJS soft deletion实现 SequelizeJS 软删除的问题
【发布时间】:2019-04-20 17:40:12
【问题描述】:

我正在尝试在 SequelizeJS 中实现“软删除”。因此,我在模型中添加了“paranoid: true”,在迁移中添加了“deletedAt”列。我尝试使用另一个问题中的answer,但由于版本不同,它不起作用。另外,我不确定我是否正确编写了控制器。网上没有那么多信息,所以我不确定如何检查我是否正确执行。我正在使用 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));
  })
}

【问题讨论】:

    标签: node.js postgresql express sequelize.js sequelize-cli


    【解决方案1】:

    我发现,我的模型和迁移都很好,问题是我在做 sequelize db:migrate:undo:allsequelize db:migrate,但 db 架构保持不变。所以,我做了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));
    }
    

    在我改变了这一切之后,它开始工作了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多