Sequelize.js onDelete:'cascade'不会删除logging的续集
我有Product
表与以下列[id, name, CategoryId]
和Category
表[id, name]
产品型号: –
module.exports = function(sequelize, DataTypes) { var Product = sequelize.define('Product', { name: DataTypes.STRING }, { associate: function(models) { Product.belongsTo(models.Category); } }); return Product }
分types号: –
module.exports = function(sequelize, DataTypes) { var Category = sequelize.define('Category', { name: { type: DataTypes.STRING, allowNull: false } }, { associate: function(models) { Category.hasMany(models.Product, { onDelete: 'cascade' }); } }); return Category }
当我删除类别时,它只删除类别而不是相关的产品。 我不知道这是为什么发生?
更新:Sequelize Version sequelize 1.7.0
================================================== ============================== 答案 (我如何解决这个问题): –
我通过使用Alter
命令Add Foreign Key Constraint
数据库约束来完成这项工作,因为通过migration
Add Foreign Key Constraint
是一个开放的错误 。
ALTER TABLE "Products" ADD CONSTRAINT "Products_CategoryId_fkey" FOREIGN KEY ("CategoryId") REFERENCES "Categories" (id) MATCH SIMPLE ON DELETE CASCADE
我相信你应该把onDelete放在Category模型中,而不是放在产品模型中。
module.exports = function(sequelize, DataTypes) { var Category = sequelize.define('Category', { name: { type: DataTypes.STRING, allowNull: false } }, { associate: function(models) { Category.hasMany(models.Product, { onDelete: 'cascade' }); } }); return Category }
至于“sequelize”:“^ 3.5.1”,只有在belongsTo
声明中放置onDelete='CASCADE'
belongsTo
,这是您的情况下的Product
模型。 这与文档相矛盾: http : //sequelize.readthedocs.org/en/latest/api/associations/index.html? highlight = onDelete#hasmanytarget- options
请看这个问题: Sequelize onDelete不工作