简体   繁体   English

如何在sequelize中将外键引用到另一个外键?

[英]How to reference foreign key to another foreign key in sequelize?

I have table 3 tables.我有表 3 表。 Versions table has a reference to Project table via ProjectID. Versions 表通过 ProjectID 引用了 Project 表。 Then List table references ProjectID (which is a foriegn key) in the Versions table.然后在 Versions 表中列出表引用 ProjectID(这是一个外键)。

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.在 sequilize 中,我定义了 3 个模型。 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!** *问题:对于列表模型,在 ProjectID 字段上的 sequilize 会在版本表中创建对 VersionID (pk)而不是ProjectID 字段 (fk) 的引用!**

An exact query that is run by sequilize (see bolded):由 sequilize 运行的精确查询(见粗体):

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;执行(默认):CREATE TABLE IF NOT EXISTS ListID 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 -您需要定义如下所述的 Sequelize 关联 -

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

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

I hope it helps!我希望它有帮助!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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