简体   繁体   中英

How to reference foreign key to another foreign key in sequelize?

I have table 3 tables. Versions table has a reference to Project table via ProjectID. Then List table references ProjectID (which is a foriegn key) in the Versions table.

List table has an "indirect" reference to Project table

Project Table 
---------------
ProjectID      


Versions Table 
---------------
VersionID
ProjectID (fk to project table) (UNIQUE constraint added)


List Table 
--------------
ListID
VersionID (fk to version table)
ProjectID (fk to fk in version table)

In sequilize I have the the 3 models defined. And in List model here's how i am creating an association via:

// Create foreign keys
List.belongsTo(Versions, {
  onDelete: "cascade",
  foreignKey: "VersionID"
});

// Create foreign keys
ConsolidatedList.belongsTo(Versions, {
  onDelete: "cascade",
  foreignKey: "ProjectID"
});

*

*ISSUE : For List model, sequilize on ProjectID field creates a reference to VersionID (pk) instead of ProjectID field(fk) in Versions table!**

An exact query that is run by sequilize (see bolded):

Executing (default): CREATE TABLE IF NOT EXISTS List ( ID INTEGER auto_increment , ProjectID INTEGER, VersionID INTEGER, PRIMARY KEY ( ID ), FOREIGN KEY ( ProjectID ) REFERENCES Versions ( VersionID ) ON DELETE CASCADE ON UPDATE CASCADE , FOREIGN KEY ( VersionID ) REFERENCES Versions ( VersionID ) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;

You need to define Sequelize associations as mentioned below -

List.belongsTo(Versions, {
  onDelete: "cascade",
  foreignKey: "VersionID",
  targetKey: "VersionID"
});

List.belongsTo(Versions, {
  onDelete: "cascade",
  foreignKey: "ProjectID",
  targetKey: "ProjectID"
});

I hope it helps!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM