我有带有token
和user_id
属性的User
和VerifyToken
模型。我需要选择一个用户,但要使用token
(从tokens
表)值。
我试过了:
await models.User.destroy({
hierarchy: true,
where: {
token: token
}
});
这是用户模型:
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: {}}]
,但是如何使用子模型中调用的user_id
?
我想要的是用一个值(子模型中的token)选择一个用户(父模型),然后用一个查询删除它。
发布于 2020-04-09 05:04:20
您想要的问题语句是在一个sequelize操作中支持join
和delete
。
我想要的是用一个值(子模型中的token)选择一个用户(父模型),然后用一个查询删除它。
在sequelize documenation中,Model.destroy的options
属性中没有include
。
因此,剩下的唯一选择是从VerifyToken
模型中选择user_id
,然后在User
模型上调用destroy,其中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
}
}
}
https://stackoverflow.com/questions/61114004
复制