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.