Je suis en train d'écrire reste en utilisant noeud, sequelize comme ORM pour mySQL . Mais en réponse, il renvoie null pour la valeur de la clé primaire.
Modèle
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
}
});
Opération de création en bloc:
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);
})
réponse:
[
{
"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"
}
]
Vous devriez définir l'option returning
:
Model.bulkCreate(values, {returning: true})
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);
})
Dans la documentation: veuillez noter que ceux-ci peuvent ne pas représenter complètement l'état des lignes dans la base de données. En effet, MySQL et SQLite ne facilitent pas la récupération des ID générés automatiquement et des autres valeurs par défaut de manière à pouvoir être mappés à plusieurs enregistrements. Pour obtenir des instances pour les valeurs nouvellement créées, vous devez les interroger à nouveau . http://docs.sequelizejs.com/class/lib/model.js~Model.html#static-method-bulkCreate
Mais vous pouvez passer une option pour lui faire renvoyer l'identifiant
orm.models.category.bulkCreate(data, { returning: true })
Un tableau d'instances est passé au gestionnaire de réussite, mais veuillez noter que celles-ci peuvent ne pas représenter complètement l'état des lignes dans la base de données. En effet, MySQL et SQLite ne facilitent pas la récupération des ID générés automatiquement et des autres valeurs par défaut de manière à pouvoir être mappés à plusieurs enregistrements. Pour obtenir des instances pour les valeurs nouvellement créées, vous devez les interroger à nouveau . http://docs.sequelizejs.com/fr/latest/api/model/#bulkcreaterecords-options-promisearrayinstance
Malheureusement, cela ne fonctionne pas dans la dernière version. Ils expliquent pourquoi ici: http://sequelize.readthedocs.org/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance
notez que la description mentionne spécifiquement mysql. Vous devrez les interroger. (l'exemple inclut 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);
});
var data = [{
'cat_name':'fashion'
},
{
'cat_name':'food'
}
];
orm.models.category.bulkCreate(data,{individualHooks: true})
.then(function(response){
res.json(response);
})
.catch(function(error){
res.json(error);
});