javascript - 使用 Sequelize 在多个表之间创建 "Many to Many"关系

标签 javascript node.js sql-server typescript sequelize.js

我在 MSSQL 中有一个已经存在的架构(下图),
我有一个搜索表,每个搜索由一些元数据和 3 种类型的过滤器组成(每个搜索可以是多个过滤器),我有一个“多对多”表来将所有类型的过滤器连接到搜索。
我想使用 Sequelize 来查询我的搜索并获取每个过滤器,但我找不到任何方法将多个过滤器连接到我的搜索表以使用连接表(过滤器)进行建模

搜索:包含搜索的元数据和搜索 id。
过滤器:包含搜索 ID 并匹配它以使用过滤器 ID 和过滤器类型(枚举:“范围”、“日期时间”、“精确”)进行过滤。
范围过滤器、日期时间过滤器、精确过滤器:过滤器本身及其信息。

如果不可能一起查询它们,我认为可能(但效率可能较低)在这些表上创建 View 并在 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'}
    }]
});

附言确切的代码可能不起作用,但概念是相同的。希望这会帮助你。有关更多信息,请点击引用资料中的链接
引用:Sequelize Associations

关于javascript - 使用 Sequelize 在多个表之间创建 "Many to Many"关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55493566/

相关文章:

sql-server 分组

JavaScript 返回类型错误 "Unable to get property ' 1' of undefined or null reference"

javascript - 从 JavaScript 调用 WCF Web 服务

javascript - Microsoft Edge 上的 SVG Logo 显示比其他浏览器大 10 倍

node.js - 如何在 node.js CLI 应用程序中使用日志记录和进度条?

node.js - 为什么追加到文件比写入文件更快?

SQL Server : select from parent where id doesnt exist in either child tables

javascript - 从 DataTables 渲染函数返回 jQuery 对象

mysql - sql查询不适用于node.js mysql,但适用于终端

sql - T-Sql 按 MIN() 选择和分组