2017-06-01 38 views
-1

我使用Sequelize和Node.js的,我需要加入2和表2个的外键,Sequelize:如何加入外键

tableA.hasOne(tableB, { foreignKey: 'fk_tableB' }); 
tableB.belongsTo(tableA, {foreignKey: 'fk_tableB' }); 

(顺便说一下,我不明白“targetKey”的功能) 但我只能获得tableA.primaryKey = tableB.fk_tableB上的连接。 如何用tableA.fk_tableA替换tableA.primaryKey?

我也尝试在两个不同的结构中(一个用真正的主键和另一个用fk_tableA作为主键)定义两次tableA:但它也不起作用(因为我需要在另一个地方使用真正的tableA模式) 。

有人想法吗?它是来自Sequelize的错误吗?

+0

FK是一个表/模型中的列的列表,其值必须在别处针对表中的PK/UNIQUE列的引用/目标列表。你在哪里阅读'targetKey''的功能?请阅读[mcve]并采取行动。 (你的不清楚,当你说“获得”或“替换”或“试图定义”或“不工作”或“真实的”时,我们不知道你的意思,而你的问题恰恰是什么?) – philipxy

+0

Ouch那真的很粗鲁!我很抱歉,如果我的判决不好,我不流利,但我会尽力做得更清楚。我的问题是关于Sequelize和Node.js,以及如何使用Sequelize语法在2个表上建立连接,而不使用主键而是使用2个外键。你同意吗?你知道Sequelize吗? – vanessa

+0

关于你对“targetKey”的评论,它只是来自sequelize文档:http://docs.sequelizejs.com/manual/tutorial/associations.html#target-keys,我希望这个功能可以完成工作,就是这样。 – vanessa

回答

0

如何用tableA.fk_tableA替换tableA.primaryKey?

没有tableA.fk_tableA。但如果有的话,我们希望你已经命名它,因为tableA.fk_tableA列是tableA中的一个键列的FK。因为这是命名列fk_tableA的约定。同样,我们也希望有一个属于像你的那样的将一个FK列添加到tableA PK的列,将其称为fk_tableA,而不是fk_tableB。就像您的hasOne为tableB PK提供了一个fk_tableB列。 (如果你想要一个FK到除PK之外的其他列,那么你可以通过targetKey来这么说)。

如果你在他们的目标表之后命名FKs,你似乎想要tableA.fk_tableB = tableB.fk_tableA。现在你已经命名它们的方式,你似乎想要tableA.fk_tableB = tableB.fk_tableB。

我需要加入2和表2个的外键

这是极不可能,你需要以上的加盟。将列声明为FK表示源/引用列的值始终是目标/引用列的值。这里的目标是PK。 FK到一个表的这种连接和另一个表的FK连接将只返回共享相同PK值的行,即使这些PK来自不同的表。

+0

我知道它真的不建议加入外键,但我不能这样做(不可能改变数据库模型)。我发现解释我的问题在这个等效的主题 - > https://stackoverflow.com/questions/28974021/sequelize-join-on-non-primary-key。谢谢 – vanessa

+0

该评论也是无法理解的,我不知道你想做什么。祝你好运。 – philipxy