gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 22:17:56 24 4
gpt4 key购买 nike

我在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com