如何从与 sequelize 的关联中获取所有数据

how to get all the data from an association with sequelize

例如我们有 TABLE ABCDAB , 和 D 相关联,但 C 仅与 B.

相关联
TABLE A
| id | B_id | D_id 

TABLE B
| id | C_id | total | transaction |

TABLE C
| id | firstname | lastname |

TABLE D
| id | price | brand |

如何使用 sequelize 将 BCD 的所有数据集中在一个 table 中并进行关联。

为tableA定义一个Model,然后使用associate()函数将其关联到models.Bmodels.Dtable秒。 table B 的定义会将其与作为其父项的 table A 以及作为其子项的 table C 相关联。 Table C 仅将 table B 定义为其父项。最后 table D 关联回 table A

// create models for each of the tables.
// this can be in different files and use a loader, etc

const ModelA = sequelize.define(
  'A',
  { /* ...field definition */ }
);

const ModelB = sequelize.define(
  'B',
  { /* ...field definition */ }
);

const ModelC = sequelize.define(
  'C',
  { /* ...field definition */ }
);

const ModelD = sequelize.define(
  'D',
  { /* ...field definition */ }
);

现在创建不同模型之间的关联。

// Table A to B and D
ModelA.hasOne(ModelB);
ModelA.hasOne(ModelD);

// Table B to A (parent) and C (child)
ModelB.belongsTo(ModelA);
ModelB.hasOne(ModelC);

// Table C to B (parent)
ModelC.belongsTo(ModelB);

// Table D to A (parent)
ModelD.belongsTo(ModelA);

现在您可以创建一个查询来获取所有相关数据。

const result = await ModelA.findAll({
  include: [ // use an array to relate to multiple tables
    {
      model: ModelB,
      include: { // we can use an object since we are only relating one table
        model: ModelC,
      },
    },
    {
      model: ModelD,
    },
  ],  
});