Sequelize: как установить PK таблицы соединения в качестве пары внешних ключей, чтобы иметь возможность использовать save () в экземпляре таблицы соединения, не вызывая «нет ошибки PK»? - PullRequest
0 голосов
/ 06 мая 2020

Как заставить Sequelize обрабатывать внешние ключи объединенной таблицы как составной первичный ключ? Я думал, что это делается по умолчанию, но когда я попытался сохранить свой экземпляр UserMenuItem (который представляет собой таблицу соединений между User и MenuItem), получил эту ошибку: Error: You attempted to save an instance with no primary key, this is not allowed since it would result in a global update.

My ассоциации определяются следующим образом:

 models.User.hasMany(models.UserMenuItem, { foreignKey: 'userID', onDelete: 'CASCADE' });
 models.UserMenuItem.belongsTo(models.User, { foreignKey: 'userID', onDelete: 'CASCADE' });

 models.MenuItem.hasMany(models.UserMenuItem, { foreignKey: 'menuItemID', onDelete: 'CASCADE' });
 models.UserMenuItem.belongsTo(models.MenuItem, { foreignKey: 'menuItemID', onDelete: 'CASCADE' });

 models.MenuItem.belongsToMany(models.User, { through: models.UserMenuItem, foreignKey: 'menuItemID', onDelete: 'CASCADE' }); // I tried adding "otherKey: 'userID'" as well
 models.User.belongsToMany(models.MenuItem, { through: models.UserMenuItem, foreignKey: 'userID', onDelete: 'CASCADE' }); I tried adding "otherKey: 'menuItemID'" as well

Я не включаю определения моделей, поскольку не думаю, что они актуальны. User и MenuItem имеют PK под названием ID, а таблица соединения имеет некоторые дополнительные поля данных, кроме FK.

Возможно ли это вообще, или мне нужно добавить ненужный PK в соединение стол?

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Даже у меня была такая же ситуация, я решил ее, передав id всякий раз, когда мы сохраняем экземпляр модели.

1 голос
/ 06 мая 2020

Вы не можете определить составной первичный ключ.

Belongs-To-Many создает уникальный ключ, если первичный ключ отсутствует в сквозной модели. Это уникальное имя ключа может быть переопределено с помощью параметра uniqueKey.

См. BelngToMany в официальных документах

...