繁体   English   中英

Select 父 model 与子 model 属性并销毁它 - sequelize/MySQL

[英]Select parent model with child model attribute and destroy it - sequelize/MySQL

我有带有tokenuser_id属性的UserVerifyToken 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 操作中支持joindelete

我想要的是 select 一个具有值(子模型中的令牌)的用户(父模型)并通过一个查询将其删除。

在 sequelize 文档中, Model.destroy没有includeoptions属性中。

所以唯一剩下的选择是 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM