Неправильный запрос с использованием ассоциации belongTo / hasMany в Sequalize ORM

#sequelize.js

#sequelize.js

Вопрос:

Я получаю неверный запрос с использованием автоматически сгенерированной функции «addXXXs»

Модели:

 module.exports = (sequelize, types) => {
    return sequelize.define('Product', {
        internal_code:{type:types.STRING},
        name:{type:types.STRING},
        description:{type:types.STRING},
        unit:{type:types.STRING},
        precio:{type:types.DECIMAL},
        alicuota:{type:types.DECIMAL},
        stock:{type:types.INTEGER},
        service:{type:types.INTEGER}
    })
}

module.exports = (sequelize, types) => {
    return sequelize.define('Imageproduct', {
        image:{type:types.STRING}
    })
}
  

Отношения:

 db.Imageproduct.belongsTo(db.Product);
db.Product.hasMany(db.Imageproduct);
  

Запросы:

 product = await db.Product.create(my_product);
images  = await db.Imageproduct.bulkCreate(my_images_list);
assoc   = await product.addImageproducts(images);
  

Сгенерированные запросы:

 1 - Executing (default): INSERT INTO "Products" ("internal_code","name","description","unit","precio","alicuota","stock","service","createdAt","updatedAt") VALUES ('P007',' 
Guitarra electrica','Guitarra electrica','',32.1,0.21,5,0,'2019-04-01 21:30:17.498  00:00','2019-04-01 21:30:17.498  00:00') RETURNING *;                               

2 - Executing (default): INSERT INTO "Imageproducts" ("id","image","createdAt","updatedAt") VALUES (DEFAULT,'blabla.png','2019-04-01 21:30:17.591  00:00','2019-04-01 21:30:
17.591  00:00'),(DEFAULT,'blabla.jpg','2019-04-01 21:30:17.591  00:00','2019-04-01 21:30:17.591  00:00');                                                               

3 - Executing (default): UPDATE "Imageproducts" SET "ProductId"=3,"updatedAt"='2019-04-01 21:30:17.667  00:00' WHERE "id" IN (NULL, NULL)                                   
  

1 и 2 верны, но я ожидаю, что в предложении IN в запросе 3 будет указан какой-то действительный идентификатор, а не NULL, фактически, я ожидаю, что идентификаторы изображений, вставленные ранее в предложение IN в запросе 3;
Кто-нибудь знает, почему это происходит?

Спасибо.

Ответ №1:

Заменить

 images  = await db.Imageproduct.bulkCreate(my_images_list);
  

Для

 images  = await db.Imageproduct.bulkCreate(my_images_list, { returning:true });
  

Таким образом, вы получаете идентификатор новых записей в объектах изображений. (только postgresql)