【问题标题】:How can i relate two tables through another table which has one to one relationship in Sequelize我如何通过另一个在 Sequelize 中具有一对一关系的表来关联两个表
【发布时间】:2021-04-19 23:57:37
【问题描述】:

我有 3 张桌子 A、B 和 C。 A 和 B 是一对一的关系。 B 和 C 是一对多的关系。 我的问题是如何通过 B 关联 A 和 C。例如:

A 有列 a_id, message

B 有列 b_id、a_id (foreign_key)

C 有列 c_id, b_id(foreign_key)

我如何在 sequelize 中通过 B 创建 A 和 C 之间的关联?

【问题讨论】:

    标签: node.js sequelize.js associations


    【解决方案1】:

    您可以在引用 B 的关联中使用 through 关键字并为关系指定 foreignKey、otherKey 和 as 名称,从而使用 relational many-to-many table association。

    // associate ModelA to ModelC through ModelB
    ModelA.associate = (models) => {
      // A to C
      ModelA.belongsToMany(models.ModelC, {
        as: 'AtoC',
        foreignKey: 'a_id',
        otherKey: 'b_id',
        through: 'ModelB',
      });
    }
    
    // associate ModelC to ModelA through ModelB
    ModelA.associate = (models) => {
      ModelC.belongsToMany(models.ModelA, {
        as: 'CtoA',
        foreignKey: 'b_id',
        otherKey: 'a_id',
        through: 'ModelB',
      });
    }
    

    要查询关系,请为关联指定 model、as 和 through。

    const result = await ModelA.findById(aID, {
      include: {
        model: 'ModelC',
        as: 'AtoC',
        through: 'ModelB',
      }
    });
    

    【讨论】:

    • 所以如果 A 和 B 有 1:1 的关系,B 和 C 有 1:N 的关系。这使得 A 和 C 具有 M:N 关系? @doublesharp
    • 没错,是多对多的关系。
    猜你喜欢
    • 2021-04-16
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多