查询一对多查询

时间:2018-05-06 23:17:24

标签: sequelize.js

您好我正在尝试在一对多表之间进行查询(一个用户有很多首选项)。目前,我有一个查询,包括在User表中搜索用户的ID以及在Preferences表中搜索该ID。这是我的工作解决方案。

        const {username} = req.params

        User.findOne({where: {username: username}, attributes:['id']})
            .then(res => {
                const obj = res.get({plain:true})
                Preferences.findAll({ where:{ userId: obj.id}})
                    .then(res => {
                        const data = res.map((r) => (r.toJSON()));
                        console.log('sucess: ', data)
                    })
                    .catch(err => console.log('inner error'))
            .catch(err => console.log('outer error', err))
            })

如何使用.findAll查询对其进行优化?我已经提出了以下查询,该查询返回Preferences表中具有外键的所有用户。但是,我无法让这个用于特定的用户名。

        Preferences.findAll({
            include: [{
                model: User, 
                where: {userId: sequelize.where(Sequelize.col('userId'), Sequelize.col('User.id'))}
            }]
        })

如果这个问题已经得到解答,请你指点我的帖子吗?我一直在挖掘Stack Overflow解决方案,但没有任何运气。提前谢谢!

// ============================

这是最终解决方案,以防将来帮助任何人。我修复了模型之间的关联并调整了查询​​:

//User has many Preferences 
User.hasMany(models.Preferences, {
  foreignKey: 'userId', 
  sourceKey: 'id',
});

//Preferences has one User
Preferences.belongsTo(models.User,{
  foreignKey: 'userId', 
  targetKey: 'id',
  onDelete: 'CASCADE',
});


//Query for Preferences by Username

get: (req, res) => {
    const {username} = req.params
    User.findAll({
      include: [{
        model: Preferences, 
        }],
        where: {username: username}
    })
    .then(response => {
        const data = response.map((r) => (r.toJSON()));
        console.log('success: ', data[0].Preferences)   
    })
    .catch(err => console.log('outer error', err))
}

1 个答案:

答案 0 :(得分:0)

确保您已声明模型之间的关联。

User.findAll({
  include: [{
    model: Preferences,
    where: { userId: Sequelize.col('user.id') }
  }]
})

sequlize文档以创建关联http://docs.sequelizejs.com/manual/tutorial/associations.html

此处还有一个有用的博客链接,https://medium.com/@THEozmic/how-to-create-many-to-many-relationship-using-sequelize-orm-postgres-on-express-677753a3edb5

如果遇到任何错误,请通过评论告诉我。