Tengo problemas para que Sequelize.js elimine las filas de mi tabla. Usé Sequelize cli para hacer todas mis migraciones y no estoy usando la función de sincronización para volver a sincronizar la base de datos al inicio. Tengo los campos de marca de tiempo e incluso el campo deleteAt en mi migración y modelos (el modelo tiene paranoico: verdadero también) y no importa qué, aún elimina la fila en lugar de agregar una marca de tiempo al campo deleteAt. Noté que cuando realizo una consulta no agrega deleteAt = NULL en la consulta como he visto en algunos tutoriales. Estoy usando Sequelize.js v3.29.0.
Archivo modelo:
'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; };Archivo de migración:
'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'); } };Aquí está el código en el controlador que estoy usando para destruir el objeto de colección.
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); }); } });Asegúrese de que paranoico sea un atributo definido dentro del parámetro del segundo objeto.
..., { classMethods: { associate: function(models) { Collection.belongsTo(models.User,{ foreignKey: 'userId' }) } }, timestamps: true, paranoid: true }Ha definido paranoico como 3. Param y ese es el problema.