我正在使用Sequelize、PostgreSQL和Node JS。
我把我的数据库设计成这样
表A是autoincremented
在关联表中,我为表A、表B和表C ID添加外键。
所以关联表看起来是这样的:
| id | tableA_id | tableB_id | tableC_id |
表A关联:
Table A => Has **Many** Table **B**.
Table A => Has **Many** Table **C**.表B关联:
Table B => Has **One** Table **A**.
Table B => Has **Many** Table **C**.表C关联:
Table C => Has **One** Table **A**.
Table C => Has **One** Table **B**.话虽如此,我仍有这样的联想:
TableAssociationModel.hasMany(TableAModel, {
as: 'TableAModel',
foreignKey: 'tableA_id',
targetKey: 'tableA_id',
});
TableAssociationModel.hasMany(TableBModel, {
as: 'TableBModel',
foreignKey: 'tableB_id',
targetKey: 'tableB_id',
});
TableAssociationModel.hasMany(TableCModel, {
as: 'TableCModel',
foreignKey: 'tableC_id',
targetKey: 'tableC_id',
});数据库示例:
| id | tableA_id | tableB_id | tableC_id |
| 1 | 2 | 1 | 1 |
| 2 | 2 | 1 | 2 |
| 3 | 2 | 2 | 3 |如果我搜索表C= 1,我将得到我的关联,但是如果我搜索ID = 2,下面的表A或表B数据将被传递。
此外,我在表中搜索(A、B和C),并希望在表协会中返回我的关联。
有什么帮助吗?
谢谢提前,我希望我解释得足够好,任何疑问请让我知道,真的想了解这是如何运作的。
PS:我是个三年级学生,别对xD太苛刻了
发布于 2020-07-29 09:03:40
所以我想明白了:
TableAModel.hasMany(TableAssociationModel, {
as: 'relationsData',
foreignKey: 'tableA_id',
sourceKey: 'tableA_id',
});
TableAssociationModel.belongsTo(TableAModel, {
as: 'tableAData',
foreignKey: 'tableA_id',
sourceKey: 'tableA_id',
});
TableBModel.hasMany(TableAssociationModel, {
as: 'relationsData',
foreignKey: 'tableB_id',
sourceKey: 'tableB_id',
});
TableAssociationModel.belongsTo(TableBModel, {
as: 'tableBData',
foreignKey: 'tableB_id',
sourceKey: 'tableB_id',
});
TableCModel.hasMany(TableAssociationModel, {
as: 'relationsData',
foreignKey: 'tableC_id',
sourceKey: 'tableC_id',
});
TableAssociationModel.belongsTo(TableCModel, {
as: 'tableCData',
foreignKey: 'tableC_id',
targetKey: 'tableC_id',
});我的联想只有一条路,而且做错了。
知道了,即使我想在TableAssociationModel,中搜索,我的主要模型是表A,B和C,所以我需要把它们当作更重要的,并告诉后遗症他们是主要的。
顺便说一句,如果您想看到在Sequelize中生成的查询,可以使用:
DEBUG=sequelize* node ***your/file.js***例如,使用/file.js <=的文件:
TableAModel.findAll({
})https://stackoverflow.com/questions/63114269
复制相似问题