是否有可能通过关联表中的属性过滤查询与sequelize?
我想通过连接表的属性过滤我的查询
我有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'] }]