2017-08-01 88 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編碼確認解決方案。