Подтвердить что ты не робот

Как вставить исходные данные, используя системизацию миграции/семян?

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

'use strict';

module.exports = {
  up: function (queryInterface, Sequelize) {
    return [
      queryInterface.bulkInsert('Users', [
        { username: "user1" },
        { username: "user2" }
    ])];
  },

  down: function (queryInterface, Sequelize) {
    return queryInterface.dropTable('Users');
  }
};

И я получаю эту ошибку:

== 20151024144833-create-conjugation: migrating =======
{ [SequelizeUniqueConstraintError: Validation error]
  name: 'SequelizeUniqueConstraintError',
  message: 'Validation error',
  errors: [],
  fields: [] }

Должен быть более простой способ сделать это. Я проверил другие вопросы SO, но синтаксис изменился в текущей версии sequelize.

UPDATE

Хорошо, я понял свою ошибку: я предполагал, что sequelize позаботится о временных отметках. Это устраняет проблему:

up: function (queryInterface, Sequelize) {
  console.log(User);
  return [
    queryInterface.bulkInsert('Users', [
      { username: "user1", createdAt: Date.now(), updatedAt: Date.now() },
      { username: "user2", createdAt: Date.now(), updatedAt: Date.now() }
    ])
  ];
}

Но мне все еще интересно, правильно ли это семена моей базы данных. Есть ли способ сделать это, используя User.create({})?

4b9b3361

Ответ 1

Альтернативой может быть использование: sequelize fixtures, вы можете инициализировать свои таблицы данными по умолчанию, объявленными как json файл или другой формат.

Ответ 2

Вы можете использовать следующее:

const City = sequelize.define('city', {
  name: { type: Sequelize.STRING },
  order_: { type: Sequelize.INTEGER }
});
City.sync().then(() => {
  City.create({
    name: 'Neuquen',
    order_: 0
  });
  City.create({
    name: 'General Roca',
    order_: 1
  });
});

Или прочитайте о "миграции" на http://docs.sequelizejs.com/en/latest/docs/migrations/

Ответ 3

new Date()

также требуется для mysql, т.е.

  return queryInterface.bulkInsert('users', [
  {
    "Forename":"A",
    "Surname": "User",
    "UserType":"1",
    "Email":"[email protected]",
    "Password":"password",
    "LastLogin":0,
    "Tokens": JSON.stringify({"tokens":[]}),
    "CreatedBy": 999,
    "CreatedAt": new Date(),
    "UpdatedAt": new Date()
  }]);