выразить, что на самом деле делает файл модели по сравнению с файлами миграции?

0

Я использую переход seelize-cli, когда дело доходит до работы с mysql db.

Если я наберу команду

sequelize init

две папки - это созданные models и migrations

также, если я устанавливаю ассоциации между двумя моделями, например

User.hasMany(Posts)

Мне нужно вручную добавить внешние ключи в файл миграции.

(но не к файлу модели, правильно?)

Кроме того, в файле миграции есть столбцы, такие как created_at, updated_at

но не в файле модели.

Когда дело доходит до использования db.sync(); таких файлов миграции нет, поэтому мне не нужно вручную вводить внешние ключи в файл модели.

Я понимаю, что файлы миграции относятся только к схеме таблицы db, но тогда, что делает фактический файл модели.?

Этот файл модели не имеет ничего общего с таблицей db?

Я понимаю, какие различия между синхронизацией и миграцией (синхронизация удаляет все таблицы, если необходимо установить силу: истина, но не миграцию)

но, возможно, мне не удалось понять, что происходит внутри страны (модель между миграцией)

любой совет будет действительно оценен!

  • 0
    @AbhinavD не могли бы вы помочь мне найти решение?
  • 0
    Похоже, это не пришло как уведомление для меня. Дайте мне знать, если я все еще могу помочь с этим
Теги:
sequelize.js
migration

1 ответ

1

Когда вы используете sequelize-cli, созданные вами столбцы createdAt и updatedAt уже созданы для вас, так как sequelize использует их для обновления таблицы. Вы можете отключить их.

Файл модели sequelize не нуждается в createAt и updatedAt, чтобы определить изменения, как это делается в sequelize.

Вам придется вручную добавить внешний ключ в файл миграции и модель. Файл модели - это ссылка для вашего sequelize для взаимодействия с вашей схемой базы данных.

Он устанавливает параметр для вашего sequelize для запуска запроса в вашу базу данных. Вы можете сказать, что файл миграции связан с вашей схемой базы данных, а файл модели обеспокоен тем, какие данные хранятся в вашем db.

Пример рассмотрим таблицу пользователей и ее базовую информацию.

Модель пользователя

module.exports = (sequelize, DataTypes) => {
  var Users = sequelize.define('users', {
    user_id: {
      type: DataTypes.STRING,
      primaryKey: true,
    },
   }, {});
  User.associate = function(models) {
    Users.hasOne(models.basicinfo, {
      foreignKey: 'user_id',
      as: 'BasicInfo'
    });
};
  return Users;
};

Основная информация Модель

module.exports = (sequelize, DataTypes) => {
  var basicinfo = sequelize.define('basicinfo', {
    first_name: {
      type: DataTypes.STRING,
    },
    last_name: {
      type: DataTypes.STRING,
    },
};{});
  basicinfo.associate = function (models) {
    basicinfo.belongsTo(models.users, {
      foreignKey: 'user_id',
      onDelete: 'CASCADE'
    });
  };
  return basicinfo;
};

Надеюсь, это немного облегчит ваше замешательство, которое вы узнаете больше, когда будете использовать эту замечательную библиотеку.

Здесь мой обновленный ответ с файлами миграции для каждой модели.

пользователя миграции

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('users', {
      user_id: {
        type: Sequelize.STRING,
        primaryKey: true,
      },
  });
 },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('users');
  }
};

basicinfo-миграция

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('basicinfo', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      user_id: {
        type: Sequelize.STRING,
        allowNull: false,
        unique: true,
        onDelete: 'CASCADE',
        references: {
          model: 'users',
          key: 'user_id',
          as: 'user_id'
        }
      },
      profile_img: {
        type: Sequelize.STRING
      },
      first_name: {
        type: Sequelize.STRING,
      },
      last_name: {
        type: Sequelize.STRING,
      },
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('basicinfo');
  }
};
  • 0
    действительно ценю за ваше подробное объяснение. Мне все еще интересно, что документы sequelize говорят, что если я устанавливаю связь между двумя моделями, sequelize автоматически создает внешний ключ. Как я уже задавал вопросы перед stackoverflow.com/questions/50386288/…, нам нужно только создать иностранный ключ вручную в файле миграции.
  • 0
    Это означает, что «вам придется вручную добавить внешний ключ как в файл миграции, так и в модель». какой из них прав?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню