是否有可能通过关联表中的属性过滤查询与sequ​​elize?

我想通过连接表的属性过滤我的查询

我有2个城市和类别,我通过第三个表CityCategory联系。 这个想法是当CityCategory得到与城市相关的类别。 year是一个特定的整数。

这是我如何指定的协会:

 module.exports = function(sequelize, DataTypes) { var CityCategory = sequelize.define('CityCategory', { year: { type: DataTypes.INTEGER, allowNull: false, validate: { notNull: true } } }, { indexes: [{ unique: true, fields: ['CityId', 'CategoryId', 'year'] }] }); return CityCategory; }; City.belongsToMany(models.Category, { through: { model: models.CityCategory } }); Category.belongsToMany(models.City, { through: { model: models.CityCategory } }); 

这是我目前的查询,不成功使用:

 City.find({ where: {id: req.params.id}, attributes: ['id', 'name'], include: [{ model: Category, where: {year: 2015}, attributes: ['id', 'name', 'year'] }] }) .then(function(city) { ... }); 

不幸的是,我不知道如何告诉sequelize使用CityCategory的year属性,而不是在类别模型中search名为“year”的属性。

 Unhandled rejection SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'Category.CityCategory.year' in 'where clause' 

这是可能的,或者我必须去手动写我的自定义查询?

提前谢谢了!

编辑

我一直在玩更多,find了解决scheme! 这似乎有点混乱,所以我确定必须有更好的方法。

 City.find({ where: {id: req.params.id}, attributes: ['id', 'name'], include: [{ model: Category, where: [ '`Categories.CityCategory`.`year` = 2015' ], attributes: ['id', 'name', 'year'] }] }) .then(function(city) { ... }); 

查询直通表时,应该使用through.where

 include: [{ model: Category, through: { where: {year: 2015}}, attributes: ['id'] }] 

您可能需要添加required: true将include包含到内部联接中

对于Sequelize v3来说,它的语法更接近你的build议,那就是:

 include: [{ model: Category, where: {year: 2015}, attributes: ['id'] }]