Sequelize:或者父项where子句和子where子句之间的OR
我有2个模型:
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。
更新:如果有其他人与此斗争,解决scheme是:
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); });
如果其他人正在寻找这个,这是我如何设法解决它:
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编码确认解决scheme。