私はSequelizeとNode.jsを使用しています.2つの外部キーで2つのテーブルを結合する必要があります。
tableA.hasOne(tableB, { foreignKey: "fk_tableB" });
tableB.belongsTo(tableA, {foreignKey: "fk_tableB" });
(ところで、私は "targetKey"の機能を理解していません) 私はtableA.primaryKey = tableB.fk_tableBの結合しか取得できません。 tableA.primaryKeyをtableA.fk_tableAで置き換えるにはどうすればよいですか?
私はまたtableAを2回定義しようとしました: 2つの異なる構造(実際のプライマリキーとfk_tableAをプライマリキーとして持つもの)でも動作しません(別の場所で実際のtableAモードが必要なため)。
誰かにアイデアはありますか? Sequelizeのバグですか?
回答:
回答№1は0tableA.primaryKeyをtableA.fk_tableAで置き換えるにはどうすればよいですか?
tableA.fk_tableAはありません。 しかし、もし存在すれば、tableA.fk_tableA列はtableAのキー列に対するFKであるため、名前を付けたと考えられます。これは、カラムfk_tableAの命名規則です。同様に、belongsToは、FKであるカラムをfk_tableAではなくfk_tableAと呼ぶように追加します。あなたのhasOneと同様に、tableAにはカラムfk_tableBにtableB PK(FKをPKよりも別の列にしたい場合は、targetKey経由でそう言います)。
ターゲットテーブルの後にFKsという名前を付けた場合、tableA.fk_tableB = tableB.fk_tableAが必要なようです。あなたが今それらの名前を付けた方法は、tableA.fk_tableB = tableB.fk_tableBが必要なようです。
私は2つの外部キーに2つのテーブルを結合する必要があります
それは 非常にありそうもない 上記の結合が必要であることを示します。 列をFKと宣言すると、ソース/参照列の値は常にターゲット/参照列の値になります。ここで、ターゲットはPKです。 1つのテーブルへのFKと別のテーブルへのFKへのそのような結合は、PKが異なるテーブルからのものであっても、同じPK値を共有する行のみを返します。