【问题标题】:Incorrect query using BelongTo / HasMany Association in Sequalize ORM在 Sequelize ORM 中使用 BelongsTo / HasMany 关联的查询不正确
【发布时间】:2019-08-23 03:48:08
【问题描述】:

我在使用自动生成的函数“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 是正确的,但我希望在查询 3 中的 IN 子句中有一些有效的 ID,而不是 NULL,事实上,我希望在查询 3 中的 IN 子句之前插入图像的 ID; 有谁知道为什么会这样?

谢谢。

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    替换

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

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

    这样,您可以在图像对象中获得新记录的 ID。 (仅限 postgresql)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      • 2013-10-05
      • 1970-01-01
      • 2018-07-13
      • 2021-11-01
      • 2019-05-01
      • 1970-01-01
      相关资源
      最近更新 更多