web-dev-qa-db-fra.com

Comment insérer des données initiales en utilisant des migrations / semences séquentielles?

J'essaie de créer ma migration initiale pour remplir la base de données de test mais je n'arrive pas à la faire fonctionner. Voici ce que j'ai dans ma migration:

'use strict';

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

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

Et je reçois cette erreur:

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

Il doit y avoir un moyen plus simple de le faire. J'ai vérifié d'autres SO questions, mais la syntaxe a changé dans la version actuelle de sequelize.

MISE À JOUR

Ok, j'ai réalisé mon erreur: je supposais que la suite se chargerait des horodatages. Cela résout le problème:

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() }
    ])
  ];
}

Mais je me demande toujours si c'est la bonne façon d'amorcer ma base de données. Existe-t-il un moyen de le faire en utilisant User.create({})?

27
nachocab

Une alternative pourrait être utilisée: sequelize fixtures , vous pouvez initier vos tables avec des données par défaut déclarées en tant que fichier json ou autre format.

4
cshion

Vous pouvez utiliser ensuite:

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

Ou lisez les "migrations" sur http://docs.sequelizejs.com/en/latest/docs/migrations/

3
Eduardo Cuomo
new Date()

également requis pour mysql, c'est-à-dire.

  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()
  }]);
2
tjp