如何从与 sequelize 的关联中获取所有数据
how to get all the data from an association with sequelize
例如我们有 TABLE A
、B
、C
和 D
但 A
、B
, 和 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 将 B
、C
和 D
的所有数据集中在一个 table 中并进行关联。
为tableA
定义一个Model
,然后使用associate()
函数将其关联到models.B
和models.D
table秒。 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,
},
],
});
例如我们有 TABLE A
、B
、C
和 D
但 A
、B
, 和 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 将 B
、C
和 D
的所有数据集中在一个 table 中并进行关联。
为tableA
定义一个Model
,然后使用associate()
函数将其关联到models.B
和models.D
table秒。 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,
},
],
});