[英]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.