对多个表进行序列化查找

Sequelize find for multiple tables

我有如下列的表格,

TABLE A
    COLUMN id
    COLUMN b-id
TABLE B
    COLUMN id
    COLUMN c-id
TABLE C
    COLUMN id
TABLE D
    COLUMN id
    COLUMN c-id

现在,我想获得所有 D 的特定 A.id

如何使用sequelize模型实现?

准确地说,我想从这样的事情开始

A.findOne({
    where: { id }
})

但是,不想一个接一个地进行多个同步调用。

提前谢谢你:)

您需要先为每个表定义模型,然后设置模型之间的关联。这将定义您可以在 include 属性 查询中使用的关系。例如,设置 required: false 将使用 LEFT JOIN,这样即使在 ModelB 中有相关行时,结果仍会从 ModelA 返回。

协会

// ModelA - ModelB - ModelC < ModelD
ModelA.hasOne(ModelB);
ModelB.hasOne(ModelC);
ModelC.hasMany(ModelD, { as: 'modelDs' });

// ModelD > ModelC < ModelB < ModelA
ModelD.belongsTo(ModelC);
ModelC.hasMany(ModelB, { as: 'modelBs' });
ModelB.hasMany(ModelA, { as: 'modelAs' });

查询

const modelA = await ModelA.findByPk(id, {
  include: {
    model: ModelB,
    include: {
      model: ModelC,
      include: {
        model: ModelD,
        as: 'modelDs',
        required: false,
      },
      required: false,
    },
    required: false,
  },
});

console.log(modelA.modelB.modelC.modelDs);