对多个表进行序列化查找
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);
我有如下列的表格,
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);