выразить, что на самом деле делает файл модели по сравнению с файлами миграции? - PullRequest
0 голосов
/ 21 мая 2018

Я использую миграцию sequelize-cli, когда дело касается работы с MySQL DB.

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

sequelize init

, будут созданы две папки models и migrations

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

User.hasMany(Posts)

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

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

также, в файле миграции есть столбцы, такие как созданный_обновленный_каталог_01 *

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 23 мая 2018

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

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

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

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

В качестве примера рассмотрим таблицу пользователей и ее basicinfo.

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

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');
  }
};
...