2017-06-01 43 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