簡體   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