即使paranoid设置为 "true",Sequelize.js仍然会删除表行[英] Sequelize.js still deletes table row even if paranoid is set to true

本文是小编为大家收集整理的关于即使paranoid设置为 "true",Sequelize.js仍然会删除表行的处理方法,想解了即使paranoid设置为 "true",Sequelize.js仍然会删除表行的问题怎么解决?即使paranoid设置为 "true",Sequelize.js仍然会删除表行问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我很难获得quelize.js以软删除表中的行.我使用semelize cli进行所有迁移,但我没有使用同步功能来启动数据库.我的迁移和模型(模型具有偏执:也是True)中的时间戳字段,甚至是DELETEDAT字段,无论它仍然删除该行,而不是将时间戳添加到Deletedat字段中.我注意到什么时候进行任何查询,它不会像我在一些教程中看到的查询中添加deletedat = null.我正在使用quelize.js v3.29.0.

模型文件:

'use strict';
module.exports = function(sequelize, DataTypes) {
  var Collection = sequelize.define('Collection', {
    userId: {
      type: DataTypes.INTEGER,
      allowNull: false,
      validate: {
          isInt: true
      }
    },
    name: {
      type: DataTypes.STRING,
      allowNull: false
    },
    description: DataTypes.TEXT,
    createdAt: {
        allowNull: false,
        type: DataTypes.DATE
    },
    updatedAt: {
        allowNull: false,
        type: DataTypes.DATE
    },
    deletedAt: {
        type: DataTypes.DATE
    }
  }, {
    classMethods: {
      associate: function(models) {
        Collection.belongsTo(models.User, { foreignKey: 'userId' })
      }
    }
  }, {
    timestamps: true,
    paranoid: true
  });
  return Collection;
};

迁移文件:

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

这是我用来破坏收集对象的控制器中的代码.

Collection.findOne({
        where: {
            id: collectionId,
            userId: user.id
        }
    }).then(function(collection){
        if (collection !== null) {
            collection.destroy().then(function(){
                res.redirect('/collection');
            }).catch(function(error){
                res.redirect('/collection/'+collectionId);
            });
        }
    });

推荐答案

确保在第二个对象param中定义了偏执率是属性.

..., {
classMethods: {
    associate: function(models) {
        Collection.belongsTo(models.User,{ foreignKey: 'userId' })
      }
  },
    timestamps: true,
    paranoid: true
}

您将偏执定义为3.参数是问题.

本文地址:https://www.itbaoku.cn/post/1764066.html