2016-11-30 56 views
3

在我的模型中有一個Users表和一個UserPhones表。 User.id是UserPhones中的外鍵。加入銷燬記錄加入

module.exports = (sequelize, DataTypes) => { 
    const User = sequelize.define('User', { 
     userid  : { 
     type  : DataTypes.UUID, 
     primaryKey : true, 
     }, 
     username : DataTypes.STRING, 
    }, 
    { 
     classMethods: { 
     associate: (models) => {  
      models.User.hasOne(models.UserPhone, {foreignKey: 'userId'}); 
     } 
     } 
    }); 

    return User; 
}; 


module.exports = (sequelize, DataTypes) => { 
    const UserPhone = sequelize.define('UserPhone', { 
     id    : { 
     type  : DataTypes.UUID, 
     primaryKey : true, 
     }, 
     userId : { 
     type  : DataTypes.UUID, 
     references: { 
      model  : require('.').User, 
      key  : 'userid', 
      deferrable: sequelize.Deferrable.INITIALLY_IMMEDIATE 
     } 
     }, 
     phoneNumber  : { 
     type: DataTypes.STRING 
     } 
    }, 
    { 
     classMethods: { 
     associate: (models) => { 
      models.UserPhone.belongsTo(models.User, {foreignKey: 'userId'}); 
     } 
     } 
    } 
); 
    return UserPhone; 
}; 

銷燬phoneNumber的很簡單:

UserPhone.destroy({where: {phoneNumber: '123456789'}}; 

我想刪除與sequ​​elize特定的電話號碼的所有用戶。 更好的是,刪除所有擁有一組電話號碼的用戶。

回答

4

我不認爲有可能在同一時間執行DELETE和JOIN查詢。

因此,

我想刪除與sequ​​elize特定的電話號碼的所有用戶。

UserPhone.findAll({attributes: ['userId'], where: {phoneNumber: '1234'}} 
.then(function (userIds) { 
    if (userIds.length === 0) 
     return Promise.resolve(true) //nothing to delete 
    return User.destroy({where: {id: {$in: userIds}}}); 
}) 

刪除有電話號碼的陣列中的一個的所有用戶。

var array = ['123', '456']; 
UserPhone.findAll({attributes: ['userId'], where: {phone: { $in: array }}} 
.then(function (userIds) { 
    if (userIds.length === 0) 
     return Promise.resolve(true) //nothing to delete 
    return User.destroy({where: {id: {$in: userIds}}}); 
})