2016-02-03 93 views
0

我有這樣相關的兩個表:Sequelize的findAll與belongsToMany協會

聯賽

sequelize.define('league', { 
    name: { 
    type: DataTypes.STRING, 
    }, 
    ownerId: { 
    type: DataTypes.INTEGER, 
    } 
}, { 
    classMethods: { 
    associate: function(models) { 
     League.belongsToMany(models.user, { 
     constraints: false, 
     through: models.UserLeague, 
     }); 
    } 
    } 
}, { 
    freezeTableName: true 
}); 

用戶

sequelize.define('user', { 
    name: { 
    type: DataTypes.STRING 
    }, 
    email: { 
    type: DataTypes.STRING, 
    unique: true, 
    validate: { 
     isEmail: true 
    } 
    }, 
    profile_picture: { 
    type: DataTypes.STRING 
    } 
}, { 
    classMethods: { 
    associate: function(models) { 
     User.belongsToMany(models.league, { 
     constraints: false, 
     through: models.UserLeague, 
     }); 
    } 
    } 
}, { 
    freezeTableName: true 
}); 

我想獲得的所有聯賽是在他們中有一定的用戶:我現在正在執行此操作,但出現錯誤column league.users.id does not exist

sequelize.transaction(function (t) { 
    return models.user.findOne({where: {email: req.query.email}}, {transaction: t}).then(function(user) { 
     return models.league.findAll({where: {'users.id': user.id}, include: [{model: models.user, as: 'users'}]}).then(function(leagues) { 
     res.json(leagues); 
     }); 
    }); 
}); 

我該如何檢索哪裏有某個用戶的聯賽?

回答

2

您應該添加您的where到包括模型:

sequelize.transaction(function (t) { 
    return models.user.findOne({where: {email: req.query.email}}, {transaction: t}).then(function (user) { 
     return models.league.findAll({ 
      include: [{ 
       model: models.user, 
       as: 'users', 
       where: { 
        id: user.id 
       }, 
       required: true 
      }] 
     }).then(function (leagues) { 
      res.json(leagues); 
     }); 
    }); 
}); 

更新:

它不是真的不錯,但我thinik,有沒有更好的解決辦法:

sequelize.transaction(function (t) { 
    return models.user.findOne({where: {email: req.query.email}}, {transaction: t}).then(function (user) { 
     var _leagueIds = []; 
     return models.league.findAll({ 
      include: [{ 
       model: models.user, 
       as: 'users', 
       where: { 
        id: user.id 
       }, 
       required: true 
      }] 
     }) 
      .each(function (league) { 
       _leagueIds.push(league.id); 
      }) 
      .then(function() { 
       return models.league.findAll({ 
        where: { 
         id: _leagueIds, 
        }, 
        include: [{ 
         model: models.user, 
         as: 'users' 
        }] 
       }); 
      }) 
      .then(function (leagues) { 
       res.json(leagues); 
      }); 
    }); 
}); 
+0

好的,這部分是我想要的:)這給了我包含我想要的用戶的聯盟,但是隻返回了想要的用戶而不是聯盟所有屬於聯盟的用戶。你明白我的意思嗎? –

+0

我很確定,你需要兩個查詢來實現這一點。 – Adam

+0

也許,但我不知道如何。第一個可以檢索聯盟,但是如何添加聯盟中的所有用戶。這就是我想念的。不知道我需要它爲我在做什麼,但我想知道如何去做:) –