web-dev-qa-db-ja.com

Sequelize Migrations / Seedsを使用して初期データを挿入する方法

テストデータベースにデータを入力するための初期移行を作成しようとしていますが、動作しません。これは私が移行に持っているものです:

_'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({})を使用してそれを行う方法はありますか?

27
nachocab

別の方法として、 sequelize Fixtures を使用することもできます。デフォルトのデータをjsonファイルまたはその他の形式として宣言して、テーブルを初期化できます。

4
cshion

次を使用できます:

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