2017-08-01 125 views
2

我有2种型号之间:Sequelize:或父母where子句和孩子where子句

const User = sequelize.define('User', { 
    email: { 
     type: DataTypes.STRING, 
    }, 
    password: { 
     type: DataTypes.STRING, 
    }, 
}); 
User.associate = (models) => { 
    User.hasOne(models.Profile, { 
     foreignKey: { 
      name: 'user_id', 
     }, 
    }); 
}; 

const Profile = sequelize.define('Profile', { 
    name: { 
     type: DataTypes.STRING, 
    }, 
    avatar: { 
     type: DataTypes.STRING, 
    }, 
}, { 
    tableName: 'profiles', 
    freezeTableName: true, 
    timestamps: false, 
}); 

Profile.associate = (models) => { 
    Profile.belongsTo(models.User, { 
     foreignKey: { 
      name: 'user_id', 
     }, 
    }); 
}; 

我想获得其中的电子邮件地址或名称匹配的特定条件的所有用户。例如:

User 
    .all({ 
     where: { 
      email: { 
       $like: filter 
      }, 
     }, 
     include: [{ 
      model: Profile, 
      where: { 
       name: { 
        $like: filter 
       }, 
      }, 
     }], 
    }) 
    .then(users => res.status(200).send(users)) 
    .catch(error => { 
     return res.sendStatus(500); 
    }); 

但它返回user.email和profile.name与条件匹配的所有用户。我想在2 where子句之间有OR。

可能吗?

注: 我使用的是Sequelize 4.0.0。

更新: 在这个别人斗争的情况下,解决办法是:

User 
    .all({ 
     where: { 
      $or: { 
       email: { 
        $like: filter 
       }, 
       '$Profile.name$': { 
        $like: filter 
       } 
      } 
     }, 
     include: [{ 
      model: Profile, 
     }], 
    }) 
    .then(users => res.status(200).send(users)) 
    .catch(error => { 
     return res.sendStatus(500); 
    }); 
+0

非常感谢您,我一直在寻找这个问题,请回答您自己的问题并将其标记为解决方案,因为这是解决方案。 –

回答

1

在情况下,如果其他人正在找这个,这是我如何设法解决它:

User 
    .all({ 
     where: { 
      $or: { 
       email: { 
        $like: filter 
       }, 
       '$Profile.name$': { 
        $like: filter 
       } 
      } 
     }, 
     include: [{ 
      model: Profile, 
     }], 
    }) 
    .then(users => res.status(200).send(users)) 
    .catch(error => { 
     return res.sendStatus(500); 
    }); 

感谢@Ninja编码确认解决方案。