2016-01-29 55 views
5

Tôi đang viết phần còn lại bằng cách sử dụng nút, phần tiếp theo là ORM cho mySQL. Tôi đang sử dụng hàm bulkCreate để tạo bản ghi với số lượng lớn. Nhưng để trả lời, nó trả về null cho giá trị khóa chính.Sequelize bulkCreate() trả về giá trị NULL cho khóa chính

Mẫu

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 Tạo hoạt động:

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

phản ứng:

[ 
    { 
    "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" 
    } 
] 

Trả lời

4

Bạn nên thiết lập các tùy chọn returning:

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

Nhưng chỉ trong postgres và MSSQL –

1

Trình xử lý thành công được truyền qua một loạt các cá thể, nhưng xin lưu ý rằng những trường hợp này có thể không đại diện cho trạng thái của các hàng trong DB. Điều này là do MySQL và SQLite không giúp dễ dàng lấy lại các ID được tạo tự động và các giá trị mặc định khác theo cách có thể được ánh xạ tới nhiều bản ghi. Để có được Instances cho các giá trị mới được tạo ra, bạn sẽ cần truy vấn lại chúng. http://docs.sequelizejs.com/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance

0

Thật không may là không hoạt động trong phiên bản mới nhất. Họ giải thích lý do tại sao tại đây: http://sequelize.readthedocs.org/en/latest/api/model/#bulkcreaterecords-options-promisearrayinstance

lưu ý rằng mô tả cụ thể đề cập đến mysql. Bạn sẽ phải truy vấn chúng. (Ví dụ bao gồm 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

Tested trong MySQL:.

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

+0

Thanks a lot nó hoạt động – Krishan

+0

chấp nhận câu trả lời :) làm việc như bùng nổ – Adiii

+0

{individualHooks : true} cực kỳ gây hiểu nhầm, ít nhất là trong phần tiếp theo 3. Tôi chỉ truy tìm nó và nó quay trở lại để thực hiện tiết kiệm cá nhân! Nó KHÔNG BULK! Xin lỗi là người mang tin xấu ... –

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

Sử dụng tốt các nhận xét trong ví dụ của bạn. Làm tốt lắm câu trả lời đầu tiên của bạn. Chào mừng (một phụ nữ khác, YAY) đến Cộng đồng;) –

Các vấn đề liên quan