【发布时间】:2014-06-01 11:16:09
【问题描述】:
我有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
}
类别模型:-
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 1.7.0
================================================ ================================== 回答(我是如何解决的。):-
我通过使用Alter 命令在数据库上添加约束来实现这一点,因为Add Foreign Key Constraint 到migration 是sequelize 中的一个开放bug。
ALTER TABLE "Products"
ADD CONSTRAINT "Products_CategoryId_fkey" FOREIGN KEY ("CategoryId")
REFERENCES "Categories" (id) MATCH SIMPLE
ON DELETE CASCADE
【问题讨论】:
-
sequelize.sync 的输出是什么?是否添加具有删除约束的外键?你是哪个版本的?
-
@JanAagaardMeier 产品表具有
CategoryId列,但未添加外键约束。如何添加带有删除约束的外键? -
添加外键约束是否需要添加迁移?
-
@Sampat,您编辑此问题的方式令人困惑。如果 agchou 的答案有效,您应该接受它作为答案,而不是修改您的问题以使其看起来从未在代码中出现错误。它会让其他人更清楚地看到包含问题的问题,以及解决问题的公认答案。
标签: node.js sequelize.js