source

Sequelize bulkCreate()가 기본 키에 대한 NULL 값을 반환합니다.

myloves 2023. 9. 5. 21:55

Sequelize bulkCreate()가 기본 키에 대한 NULL 값을 반환합니다.

나는 노드를 사용하여 rest를 작성하고 있으며, 나의 SQL에 대한 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/en/latest/api/model/ #messages 레코드를 생성할 수 없습니다. 레코드를 생성할 수 없습니다. 어레이 인스턴스를 생성할 수 없습니다.

안타깝게도 최신 버전에서는 작동하지 않습니다.그들은 다음과 같은 이유를 설명합니다. http://sequelize.readthedocs.org/en/latest/api/model/ #messages create 레코드-contract-array 인스턴스

설명에는 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);
 });

설명서에서: 이러한 행이 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 })
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);
 });

언급URL : https://stackoverflow.com/questions/35079286/sequelize-bulkcreate-returns-null-value-for-primary-key