Я пытаюсь отфильтровать свой запрос по атрибутам таблицы соединения
У меня есть 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) {
...
});
К сожалению, я не уверен, как сказать, что использовать атрибут CityCategory year вместо того, чтобы искать атрибут "год" в модели категории...
Unhandled rejection SequelizeDatabaseError: ER_BAD_FIELD_ERROR: Unknown column 'Category.CityCategory.year' in 'where clause'
Возможно ли это, или мне нужно будет вручную написать свой пользовательский запрос?
Большое спасибо заранее!
изменить
Я немного поиграл и нашел решение! Это кажется немного грязным, поэтому я уверен, что должен быть лучший способ.
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) {
...
});