【发布时间】:2020-11-13 03:17:13
【问题描述】:
我在mysql中有两个表:
create table comments
(
id int unsigned auto_increment primary key,
postId varchar(100) not null,
text text not null,
constraint commentForPost foreign key (postId) references posts (id)
);
create table post
(
id varchar(100) not null primary key,
name varchar(100) not null,
);
以及以下两个模型在 sequelize 中: post.js 文件:
class Post extends Model {}
Post.init({
// Model attributes are defined here
id: {
type: DataTypes.STRING,
primaryKey: true
},
name: {
type: DataTypes.STRING,
}
}, {
// Other model options go here
sequelize, // We need to pass the connection instance
modelName: 'Post', // We need to choose the model name
tableName: 'posts',
timestamps: false
});
Post.hasMany(Comment, { foreignKey: 'postId', onDelete: 'CASCADE'})
Comment.belongsTo(Post, { foreignKey: 'postId' });
comment.js 文件:
class Comment extends Model {}
Comment.init({
// Model attributes are defined here
id: {
type: DataTypes.STRING,
primaryKey: true
},
postId: {
type: DataTypes.STRING,
allowNull: false
},
text: {
type: DataTypes.text,
allowNull: false
}
}, {
// Other model options go here
sequelize, // We need to pass the connection instance
modelName: 'Comment', // We need to choose the model name
tableName: 'comments',
timestamps: false
});
现在我想在删除帖子时删除帖子的 cmets。我使用的代码如下:
const post = await Post.destroy({
where: {id}
});
这会生成以下查询:
DELETE FROM `posts` WHERE `id` = '1'
我得到的错误如下:
UnhandledPromiseRejectionWarning: SequelizeForeignKeyConstraintError: 无法删除或更新父行:外键约束失败 (
db.comments, 约束commentForPost外键 (postId) 参考posts(id))
我的sequelize版本是:6.3.5
如何实现删除帖子同时删除“孤儿”cmets?
【问题讨论】:
标签: mysql node.js sequelize.js