在 Sequelize 中,当您在中间表中具有除外键以外的其他属性时,您也必须定义其模型。
根据上述模式,您必须拥有所有表的模型,包括中间表(过滤器)。
以这种方式分配关联:
//associations from search model
SearchesModel.belongsToMany(RangesFiltersModel, {through: FiltersModel, foriegnKey: 'filter_search_id', otherKey: 'filter_id'});
SearchesModel.belongsToMany(ExactFiltersModel, {through: FiltersModel, foriegnKey: 'filter_search_id', otherKey: 'filter_id'});
SearchesModel.belongsToMany(DatetimeFiltersModel, {through: FiltersModel, foriegnKey: 'filter_search_id', otherKey: 'filter_id'});
//associations from filters
RangesFilterModel.belongsToMany(SearchesModel, {through: FiltersModel, foreignKey: 'filter_id', otherKey: 'filter_search_id'});
ExactFilterModel.belongsToMany(SearchesModel, {through: FiltersModel, foreignKey: 'filter_id', otherKey: 'filter_search_id'});
DatetimeFilterModel.belongsToMany(SearchesModel, {through: FiltersModel, foreignKey: 'filter_id', otherKey: 'filter_search_id'});
现在,假设我有一个搜索对象:
search.getRangesFilterModels({through: {filterType: 'range'}});
search.getDatetimeFilterModels({through: {filterType: 'datetime'}});
search.getExactFilterModels({through: {filterType: 'exact'}});
当你想检索每个对象包含所有关联过滤器的所有搜索对象时,你可以这样查询:
SearchesModel.findAll({
include: [{
ExactFilterModel,
through: {filterType: 'exact'}
}, {
DatetimeFilterModel,
through: {filterType: 'datetime'}
}, {
RangesFilterModel,
through: {filterType: 'range'}
}]
});
附:确切的代码可能不起作用,但概念是相同的。希望这会对你有所帮助。有关更多信息,请点击参考资料中的链接
参考:Sequelize Associations