ノードを使用して残りを記述し、mySQLのORMとして続編します。 bulkCreate関数を使用して、レコードを一括で作成しています。しかし、応答では、主キー値に対してnullを返します。
モデル
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
}
});
一括作成操作:
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);
})
応答:
[
{
"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"
}
]
returning
オプションを設定する必要があります。
Model.bulkCreate(values, {returning: true})
MySQLでテスト済み:
Model.bulkCreate(values, { individualHooks: 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);
})
ドキュメントから:これらはDB内の行の状態を完全に表していない可能性があることに注意してください。これは、MySQLとSQLiteが複数のレコードにマッピングできる方法で自動生成されたIDやその他のデフォルト値を簡単に取得することができないためです。新しく作成された値のインスタンスを取得するには、それらを再度クエリする必要があります。 http://docs.sequelizejs.com/class/lib/model.js~Model.html#static-method-bulkCreate
ただし、idを返すオプションを渡すことができます
orm.models.category.bulkCreate(data, { returning: true })
成功ハンドラにはインスタンスの配列が渡されますが、これらはDB内の行の状態を完全に表していない場合があることに注意してください。これは、MySQLとSQLiteが複数のレコードにマッピングできる方法で自動生成されたIDやその他のデフォルト値を簡単に取得することができないためです。新しく作成された値のインスタンスを取得するには、それらを再度クエリする必要があります。 http://docs.sequelizejs.com/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance
残念ながら、最新バージョンでは機能しません。彼らはここで理由を説明します: http://sequelize.readthedocs.org/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance
説明では特にmysqlに言及していることに注意してください。それらを照会する必要があります。 (例には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);
});