2017-04-19 11 views
1

我無法讓Sequelize.js軟刪除表格中的行。我使用Sequelize cli來完成所有我的遷移,並且我沒有使用同步功能在開始時重新同步數據庫。我在遷移和模型中有時間戳字段,甚至是deletedAt字段(模型有偏執:也是),並且不管它還是刪除行而不是將時間戳添加到deletedAt字段。我注意到什麼時候查詢它不會在查詢中添加deletedAt = NULL,就像我在一些教程中看到的那樣。我正在使用Sequelize.js v3.29.0。即使將偏執設置爲true,Sequelize.js仍會刪除表格行

模型文件:

'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); 
      }); 
     } 
    }); 

回答

2

確保偏執是第二個對象參數中定義的屬性。

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

您已經將偏執定義爲3.參數就是這個問題。

+0

非常感謝。我沒有意識到類級選項與Model定義的第二級中的classMethods和instanceMethods一樣。 – bach942

+0

碰巧,不客氣。 – djra

相關問題