Как связать внешний ключ с другим внешним ключом в sequelize? - PullRequest
0 голосов
/ 07 марта 2020

У меня есть таблица 3 таблицы. Таблица версий имеет ссылку на таблицу Project через ProjectID. Тогда таблица списка ссылается на ProjectID (который является внешним ключом) в таблице версий.

Таблица списка имеет «косвенную» ссылку на таблицу проекта

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)

В последующем у меня определены 3 модели. И в модели списка вот как я создаю ассоциацию с помощью:

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

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

*

* ВЫПУСК : Для модели списка, sequilize в поле ProjectID создает ссылку на VersionID (pk) вместо поля ProjectID (fk) в таблице версий! **

Точный запрос, который выполняется с помощью sequilize (см. Жирный шрифт):

Выполнение (по умолчанию) ): СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ List (ID INTEGER auto_increment, ProjectID INTEGER, VersionID INTEGER, ПЕРВИЧНЫЙ КЛЮЧ (ID), ИНОСТРАННЫЙ КЛЮЧ (ProjectID) ССЫЛКИ Versions ( VersionID) НА УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИИ КАСКАД , ИНОСТРАННЫЙ КЛЮЧ (VersionID) ССЫЛКИ Versions (VersionID) НА УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИИ КАСКАД) ENGINE = InnoDB;

1 Ответ

0 голосов
/ 09 марта 2020

Вам необходимо определить ассоциации Sequelize, как указано ниже -

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

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...