Не удается добавить ограничение внешнего ключа — ПОСЛЕДОВАТЕЛЬНОСТЬ

#javascript #node.js #express #sequelize.js

Вопрос:

Я думал, что подобная ошибка должна была быть связана с несоответствием типа поля(типа данных). но это оказалось ложным, так как я попытался изменить типы данных в идентификаторе таблицы и внешнем ключе на integer и uuid, но все равно результат тот же. Я хотел бы также отметить, что я совершенно новичок в nodejs, так что вы знаете, откуда я…

migration/xxxxxxx-demo-user.js

 'use strict';
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('Users', {
      id: {
        type: Sequelize.UUID,
        defaultValue: Sequelize.UUIDV4,
        allowNull: false,
        primaryKey: true
      },
      firstName: {
        type: Sequelize.STRING
      },
      lastName: {
        type: Sequelize.STRING
      },
      email: {
        type: Sequelize.STRING
      },
      phoneNumber: {
        type: Sequelize.STRING
      },
      country: {
        type: Sequelize.STRING
      },
      PlanId: {
        type: Sequelize.UUID,
        references: {
            model: 'Plans',
            key: 'id'
        },
        onUpdate: 'CASCADE',
        onDelete: 'SET NULL',
      },
      password: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('Users');
  }
};
 

migrations/xxxxxx-demo-plan.js

 'use strict';
module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable('Plans', {
      id: {
        type: Sequelize.UUID,
        defaultValue: Sequelize.UUIDV4,
        allowNull: false,
        primaryKey: true
      },
      title: {
        type: Sequelize.STRING
      },
      createdAt: {
        allowNull: false,
        type: Sequelize.DATE
      },
      updatedAt: {
        allowNull: false,
        type: Sequelize.DATE
      }
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable('Plans');
  }
};
 

сообщение об ошибке

введите описание изображения здесь

Комментарии:

1. В чем заключается сообщение об ошибке?

Ответ №1:

Попробуйте переименовать свой «xxxxxxx-demo-user.js» и «xxxxxxx-demo-plan.js» имена файлов миграции. Как и в первый раз, вы запускали миграцию пользователей перед миграцией плана, поэтому ваше поле «планИд» (таблицы пользователей) указывает на несуществующую таблицу планов. Попробуйте что-нибудь подобное и снова запустите миграцию:

 20210918101111-demo-plan.js
20210918102222-demo-user.js
 
 sequelize db:migrate:undo:all
sequelize db:migrate
 

Комментарии:

1. идеально, другими словами, я должен был создать xxx-plan.js миграция до xxx-user.js. сработало идеально. Спасибо