javascript - 使用 Sequelize 在多个表之间创建“多对多”关系
问题描述
我在 MSSQL 中有一个已经存在的模式(下图),
我有一个搜索表,每个搜索由一些元数据和 3 种类型的过滤器组成(每个搜索可以是多个),我有一个“多到许多”表将所有类型的过滤器连接到搜索。
我想使用 Sequelize 查询我的搜索并获取每个过滤器,但我找不到任何方法将多个过滤器连接到我的搜索表以使用连接表(过滤器)建模
搜索:包含搜索的元数据和搜索 ID。
过滤器:包含搜索 id 并匹配它以使用过滤器 id 和过滤器类型进行过滤(枚举:“范围”、“日期时间”、“精确”)。
范围过滤器、日期时间过滤器、精确过滤器:过滤器本身及其信息。
如果不可能一起查询它们,我认为在这些表上创建一个视图并在 Sequelize 中为它创建一个模型可能是可能的(但效率可能较低),但我不确定我能做到这一点也是。
是否可以按照我想要的方式建模?如果是,我该如何创建这种连接?
谢谢!
解决方案
在 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'}
}]
});
PS 确切的代码可能不起作用,但概念是相同的。希望这会对你有所帮助。有关更多信息,请点击参考参考中的链接:Sequelize Associations
推荐阅读
- java - Maven 生命周期和插件
- javascript - 如何使自定义块形状成块?
- c# - 保存转换后的邮件地址时,为什么我的数据库中有空值?
- python - 使用 selenium 执行事件和抓取
- c - 使用 fork() 的 Linux 进程树
- django - 在 Apache 服务器上提供的 Django 站点不起作用,日志没有错误
- python - Python - 动态创建的字典无法返回或添加到另一个字典
- html - 如何在 Angular2 (7) 中使用 NgModel 在 Select/Option 中设置占位符?
- reactjs - 语义用户界面反应:Form.Select 中的大型数据集是否会使表单变慢?
- angular - 角度,在 Array.map 中等待函数结束继续