2016-11-30 4 views
3

В моей модели есть таблица Users и таблица UserPhones. User.id - это внешний ключ в UserPhones.secelize destroy record with join

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

Я хотел бы, чтобы удалить всех пользователей, которые имеют определенное число с 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}}}); 
})