2016-11-30 5 views
3

私のモデルには、UsersテーブルとUserPhonesテーブルがあります。 User.idはUserPhonesの外部キーです。 phoneNumberを破棄sequelize結合レコードを破棄する

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; 
}; 

は簡単です:

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

私はsequelizeで特定の電話番号を持つすべてのユーザーを削除したいと思います。 さらに、電話番号の配列のいずれかを持つすべてのユーザーを削除してください。

答えて

4

DELETEとJOINクエリを同時に実行することはできません。

したがって、

私はsequelizeで特定の電話番号を持つすべてのユーザーを削除したいと思います。

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}}}); 
}) 
関連する問題