2017-06-01 18 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.primaryKeyをtableA.fk_tableAで置き換えるにはどうすればよいですか?

2つの異なる構造(実際のプライマリキーと1つのプライマリキーと1つのプライマリキー)と2つの異なる構造で定義しようとしましたが、実際には機能しません(別の場所で実際のtableAモードが必要なため) 。

アイデアはありますか? Sequelizeのバグですか?

+0

FKは、テーブル内のPK/UNIQUEである列の参照/ターゲットリストの値が他の場所になければならない1つのテーブル/モデル内の列のリストです。どこで「targetKey」の機能について読んでいますか? [mcve]を読んで行動してください。あなたが「取得する」、「置き換える」、「定義しようとする」、「動かない」、「本当の」と言ったときの意味はわかりません。あなたの質問は何ですか?) – philipxy

+0

それは本当に失礼だった!私の文章が悪い場合は申し訳ありませんが、私は流暢ではありませんが、私は明確にしようとします。私の質問は、SequelizeとNode.jsに関するもので、プライマリキーではなく2つの外部キーを使用せずに、Sequelize構文で2つのテーブルを結合する方法でした。あなたはそれに同意しますか?あなたはSequelizeを知っていますか? – vanessa

+0

そして、 "targetKey"に対するあなたのコメントに関しては、これはsequelizeのドキュメントから来ただけです:http://docs.sequelizejs.com/manual/tutorial/associations.html#target-keys、私はこの機能が仕事、それだけです。 – vanessa

答えて

0

tableA.primaryKeyをtableA.fk_tableAに置き換えるにはどうすればよいですか?

tableA.fk_tableAはありません。しかし、もし存在すれば、tableA.fk_tableA列はtableAのキー列に対するFKであるため、名前を付けたと考えられます。これは、列fk_tableAの命名規則です。同様に、belongsToは、あなたのように、FKである列をtableA PKに追加して、fk_tableAではなくfk_tableAと呼ぶことを期待します。あなたのhasOneのようにtableA PKにtableB PKにfk_tableBを与えます。 (もしあなたがPKよりも別の列にFKをつけたいのであれば、targetKeyでそう言います)

FKsのターゲットテーブルの後にFKsという名前を付けた場合は、tableA.fk_tableB = tableB.fk_tableAが必要です。あなたが今それらの名前を付けた方法は、tableA.fk_tableB = tableB.fk_tableBが必要なようです。

は、私はそれはあなたが上記の参加必要極めてまれある2つの外部キー

上の2つのテーブルを結合する必要があります。列をFKと宣言すると、ソース/参照列の値は常にターゲット/参照列の値になります。ここで、ターゲットはPKです。 1つのテーブルへのFKと別のテーブルへのFKへのそのような結合は、PKが異なるテーブルからのものであっても、同じPK値を共有する行のみを返します。

+0

私はそれが本当に外部キーに参加することはお勧めしないしかし、私はそうではありません(データベースモデルを変更する可能性はありません)。この同等の問題で私の問題の説明が見つかりました - > https://stackoverflow.com/questions/28974021/sequelize-join-on-non-primary-key。ありがとう – vanessa

+0

そのコメントも理解できない&私はあなたが何をしたいのか分からない。がんばろう。 – philipxy

関連する問題