2016-01-29 17 views
5

Sto scrivendo il resto utilizzando il nodo, sequelize come ORM per mySQL. Sto utilizzando la funzione bulkCreate per creare record in blocco. Ma in risposta sta restituendo null per il valore della chiave primaria.Sequenziare bulkCreate() restituisce il valore NULL per la chiave primaria

Modello

sequelize.define('category', { 
    cat_id:{ 
     type:DataTypes.INTEGER, 
     field:'cat_id', 
     primaryKey: true, 
     autoIncrement: true, 
     unique:true 
    }, 
    cat_name:{ 
     type: DataTypes.STRING, 
     field: 'cat_name', 
     defaultValue:null 
    } 
}); 

Bulk Crea operazione:

var data = [ 
     { 
      'cat_name':'fashion' 
     }, 
     { 
      'cat_name':'food' 
     } 
    ]; 

    orm.models.category.bulkCreate(data) 
    .then(function(response){ 
     res.json(response); 
    }) 
    .catch(function(error){ 
     res.json(error); 
    }) 

risposta:

[ 
    { 
    "cat_id": null, 
    "cat_name": "fashion", 
    "created_at": "2016-01-29T07:39:50.000Z", 
    "updated_at": "2016-01-29T07:39:50.000Z" 
    }, 
    { 
    "cat_id": null, 
    "cat_name": "food", 
    "created_at": "2016-01-29T07:39:50.000Z", 
    "updated_at": "2016-01-29T07:39:50.000Z" 
    } 
] 

risposta

4

è necessario impostare l'opzione returning:

Model.bulkCreate(values, {returning: true}) 
+1

Ma solo in postgres e mssql –

1

Il gestore di successo viene passato una serie di istanze, ma si prega di notare che questi potrebbero non rappresentare completamente lo stato delle righe nel DB. Questo perché MySQL e SQLite non rendono facile ottenere indietro ID generati automaticamente e altri valori predefiniti in un modo che può essere mappato su più record. Per ottenere le istanze per i valori appena creati, dovrai richiederli nuovamente. http://docs.sequelizejs.com/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance

0

Sfortunatamente non funziona nell'ultima versione. Spiegano perché qui: http://sequelize.readthedocs.org/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance

nota che la descrizione menziona in modo specifico mysql. Dovrai interrogarli per loro. (Esempio include var _ = require('lodash');

var cat = rm.models.category; 
cat.bulkCreate(data) 
.then(function (instances) { 
    var names = _.map(instances, function (inst) { 
     return inst.cat_name; 
    }); 
    return cat.findAll({where: {cat_name: {$in: names}}); 
}) 
.then(function(response){ 
    res.json(response); 
}) 
.catch(function(error){ 
    res.json(error); 
}); 
8

testato in MySQL:.

Model.bulkCreate(values, { individualHooks: true })

+0

Grazie mille funziona – Krishan

+0

accettato risposta :) opera come braccio – Adiii

+0

{individualHooks : true} è decisamente fuorviante, almeno in Sequelize 3. L'ho appena tracciato e si torna a fare salvataggi individuali! NON È PIÙ BULBO! Mi spiace essere il portatore di cattive notizie ... –

1
var data = [ 
    { 
     'cat_name':'fashion' 
    }, 
    { 
     'cat_name':'food' 
    } 
]; 

Model.bulkCreate(data) 
.then(function() { 

//(if you try to immediately return the Model after bulkCreate, the ids may all show up as 'null') 
    return Model.findAll() 
}) 
.then(function(response){ 
    res.json(response); 
}) 
.catch(function(error){ 
    res.json(error); 
}) 
+0

Buon uso dei commenti nel tuo esempio. Bel lavoro per la tua prima risposta. Benvenuto (un'altra donna, YAY) alla Community;) –

Problemi correlati