Sequelize с использованием диалекта MySQL не удалось создать внешний ключ при переносе моделей - PullRequest
0 голосов
/ 07 января 2020
  • Я использую команды sequelize для создания и переноса моделей для создания таблиц в базе данных MySql.
  • Для создания новой модели: sequelize model:create --name Demo --attributes column:string
  • И после генерации файла Model и миграция , добавив несколько строк кода для создания ограничений на связывание и внешний ключ с использованием данного фрагмента кода:
  • В производной / дочерней таблице Comapny:
      Employee.associate = function (models) {
            // associations can be defined here
            Employee.belongsTo(models.Company, {
                foreignKey: "companyId",
                onDelete: "CASCADE"
            })
        };
  • В базовой / родительской таблице Comapany:

        Company.associate = function (models) {
            // associations can be defined here
            Company.hasMany(models.Employee,{
                foreignKey:"companyId",
            })
        };
    

Но это не отражается в Таблица-> ALTER TABLE-> ForeignKey Ограничения .

Ответы [ 2 ]

0 голосов
/ 08 января 2020
  • Ограничение внешнего ключа отразится на БД MySQL и ее таблице, только когда мы тоже изменим файл миграции вместе с файлом модели.
  • Мы должны добавить в файл миграции, например:
    companyId:{
        type: Sequelize.INTEGER,
        onDelete: "CASCADE",
        references: {
            model: "Comapany",
            key: "id"
        }
      },
    
  • У меня это сработало успешно.
0 голосов
/ 07 января 2020

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

Employee.associate = function (models) {
            // associations can be defined here
            Employee.belongsTo(models.Company, {
                sourceKey: "companyId",
                foreignKey: "id",
                onDelete: "CASCADE"
            })
        };

и

Company.associate = function (models) {
        // associations can be defined here
        Company.hasMany(models.Employee,{
            foreignKey:"companyId",
        })
    };

этот будет просто предполагать, что ваш исходный ключ является вашим первичным ключом, который, вероятно, id

...