[英]Select parent model with child model attribute and destroy it - sequelize/MySQL
我有带有token
和user_id
属性的User
和VerifyToken
model。 我需要 select 用户,但带有token
(来自tokens
表)值。
我努力了:
await models.User.destroy({
hierarchy: true,
where: {
token: token
}
});
这是用户 model:
const VerifyToken = require('./verifyToken');
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
password: DataTypes.STRING,
email: DataTypes.STRING,
}, {
tableName: 'users',
//syncOnAssociation: true
hierarchy: true
});
User.associate = function (models) {
const {VerifyToken} = models;
User.hasOne(VerifyToken, {
onDelete: 'CASCADE'
});
};
return User;
};
和验证令牌VerifyToken
:
const User = require('./user');
module.exports = (sequelize, DataTypes) => {
const VerifyToken = sequelize.define('VerifyToken', {
user_id: DataTypes.INTEGER,
token: DataTypes.STRING,
}, {
tableName: 'verify_tokens',
syncOnAssociation: true,
hierarchy: true
});
VerifyToken.associations = function (models) {
const {User} = models;
VerifyToken.belongsTo(User);
};
return VerifyToken;
};
问题是,我什至不知道从哪里开始。 我尝试过include:[{model: models.VerifyToken, where: {}}]
,但是如何使用从子 model 调用的user_id
?
我想要的是 select 一个具有值(子模型中的令牌)的用户(父模型)并通过一个查询将其删除。
您想要的问题陈述是在一个 sequelize 操作中支持join
和delete
。
我想要的是 select 一个具有值(子模型中的令牌)的用户(父模型)并通过一个查询将其删除。
在 sequelize 文档中, Model.destroy没有include
在options
属性中。
所以唯一剩下的选择是 select 来自VerifyToken
model 的user_id
,然后对User
model 调用销毁,其中user_id
中的id
来自VerifyToken
。
在代码中,它将如下所示
const verifyTokens = await VerifyToken.findAll({
where: {
token: {
[Sequelize.Op.In] : YOUR_TOKENS_FOR_WHICH_YOU_WANT_TO_DELETE_YOUR_USER
}
}
}
const userIdsToDestroy = verifyTokens.map(verifyToken => verifyToken.user_id)
await User.destroy({
where: {
id: {
[Sequelize.Op.in] : userIdsToDestroy
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.