在连接表上查询查询

时间:2017-11-21 03:22:16

标签: node.js sequelize.js

我正在尝试使用sequelize查询连接表: 这是模型:

db.client.belongsToMany(db.user, {
  through: db.clientUser,
   onDelete: 'cascade',
});
db.user.belongsToMany(db.client, {
   through: db.clientUser,
 });

这就是我想要做的事情:

db.user.findAll({
      where: {
        group_id: 1,
      },
      include: [{
        model: db.clientUser,
        where: {
          is_manager: 1,
        }
      }],
      raw: true,
    })

但是我收到以下错误:client_user is not associated to user!

知道这个问题的原因是什么?

2 个答案:

答案 0 :(得分:2)

您在client user之间声明了clientUser之间的关系。虽然很迂腐,但它的抱怨在技术上是正确的:clientclientUser之间没有明确宣布的关系。也不应该:你的belongsToMany关系应该照顾到这一点。您的查询可以调整为与此关系一起使用。

注意:我不知道在哪些表中找到了group_id和is_manager。它们可能需要随意乱转。

db.user.findAll({
  where: {
    group_id: 1,
  },
  include: [{
    model: db.client,
    through: {
      where: {
        is_manager: 1, // Assuming clientUser.is_manager?
      },
    }],
  raw: true,
})

答案 1 :(得分:0)

为了执行连接,您必须在模型声明中指定每个模型与您要执行的其他模型的关联。像belongsTo,hasMany等协会。 阅读所有相关内容here