2015-10-24 7 views
23

Sto provando a creare la mia migrazione iniziale per popolare il database di test ma non riesco a farlo funzionare. Questo è quello che ho nella mia migrazione:Come inserire i dati iniziali usando sequenze migrazioni/semi?

'use strict'; 

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

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

E io ottenere questo errore:

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

Ci deve essere un modo più semplice per fare questo. Ho controllato altre domande su SO, ma la sintassi è stata modificata nella versione corrente di sequelize.

UPDATE

Ok, ho capito il mio errore: mi è stato presupposto che sequelize si sarebbe preso cura dei timestamp. Questo risolve il problema:

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

ma sto ancora chiedendo se questo è il modo giusto per seminare il mio database. C'è un modo per farlo usando User.create({})?

+5

ho avuto problemi con 'Data. now() 'e ne aveva bisogno per sostituire con' new Date() '. Utilizzando SQLite, non è stato possibile interrogare il database, poiché il tempo è stato salvato nel formato errato ('Uncaught TypeError: date.indexOf non è una funzione' in' sequelize/lib/dialects/sqlite/data-types.js: 28: 14') – wegenerd

risposta

3

Un'alternativa potrebbe essere l'uso: sequelize fixtures, è possibile inizializzare le tabelle con dati predefiniti dichiarati come file JSON o altro formato.

2

È possibile utilizzare la prossima:

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

o letto su "migrazioni" a http://docs.sequelizejs.com/en/latest/docs/migrations/

1
new Date() 

anche necessario per mysql, cioè

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