我试图删除与表中的行关联的行,而不删除主行(因此不能使用CASCADE)。
这是一个原始的PostgreSQL查询,它完成了我想用SQL实现的功能。sequelize能够生成这样的查询吗:
DELETE FROM session USING user WHERE session.user_id = user.id AND user.username = 'bob'
模型为(不包括无关列):
create table user (
id uuid primary key default uuid_generate_v4(),
username text UNIQUE NOT NULL
);
create table session (
id uuid primary key default uuid_generate_v4(),
user_id uuid NOT NULL references user(id) ON DELETE CASCADE
);
关联在sequelize中定义为:
Session.belongsTo(models.User, {
foreignKey: "user_id"
});
User.hasMany(models.Session, {
foreignKey: "user_id"
});
查询的另一个版本可以是:
DELETE FROM session WHERE session.user_id = (SELECT user_id FROM user WHERE username = 'bob');
但是我想sequelize还不能处理子查询?
我试了一些沿着的方法:
return Session.destroy({
include: [
{ model: User, where: { username: 'bob' }}
],
truncate: false
});
然而,续集抱怨道:
错误:model.destroy的options参数中缺少where或truncate属性。
2条答案
按热度按时间x4shl7ld1#
如果有人来到这里,下面是我"***使用sequelize***删除关联行"的方法:图书馆提供的一点帮助:
1.从数据库读取用户(
Users.findOne({ ... })
)1.调用sequelize提供的方法
setSessions(array)
(名称取决于您的模型),该方法返回一个promise。后来:
fjaof16o2#
希望能帮上忙。有什么意见可以联系我。