【问题标题】:BelongsToMany Association and Inserting to the DB using NodeJS SequelizeBelongsToMany 关联并使用 NodeJS Sequelize 插入数据库
【发布时间】:2019-02-05 16:27:02
【问题描述】:

我有 2 个 A 和 B 类,3 个表 A、B 和 AB

A.belongsToMany(B,as:'Bs', through: models.AB) 
B.belongsToMany(A,as:'As', through: models.AB)

到目前为止,这些关联都在工作,我能够获取包含 B 的 A,反之亦然。

当我尝试创建 A 时,我正在发送包含所选 B 值的 JSON。 我的 JSON:

{
"name" : "A"
"Bs": [
        {"id_B" : 1},
        {"id_B" :2},
        {"id_B" :3}
    ]
}

我插入行的代码是:

A= await models.A.build(req.body, 
           {
             transaction:transaction,
             include:[
                { as:'Bs',required:true,model:models.B},
             ]
           }
)

我期望的结果是 sequelize 使用提供的 id 和新创建的 id_A 在 AB 表中创建行,但它试图在表 B 中创建行 id_B 并由于其他属性而失败为空。

我已经搜索了很长时间并尝试了多种解决方案,我知道我可以通过两个步骤来做到这一点:

1)创建一个

2)A.addB()

问题:

1) 可以一步完成吗?

2) 我的 JSON 有问题还是根本不可能?

【问题讨论】:

  • 我认为在构建期间不可能创建关联。你必须先创建A 然后set B
  • 是的,我认为现在就是这种情况......我没有找到任何其他方式
  • 那么,您是在尝试关联现有的B 还是创建一个新的B

标签: node.js express sequelize.js


【解决方案1】:

create/build 中使用include 表示我们要将记录插入到包含的表中。因此下面的 include 意味着记录应该被插入到表 B:

include:[
            { as:'Bs',required:true,model:models.B},
        ]

由于 DB 中已经存在 B 值,因此只能将值添加到 AAB 所以需要的是:

  1. 添加AAB 表之间的关联。
  2. create/build 语句中使用AB

代码应如下所示:

A.belongsToMany(B, { through: AB, as: 'Bs', foreignKey: 'id_A' }); // Not relevant for this use case
B.belongsToMany(A, { through: AB, as: 'As', foreignKey: 'id_B' }); // Not relevant for this use case
A.hasMany(AB, { as: 'ABs', foreignKey: 'id_A'} );

const a = await A.create({ 
    id: 1,
    ABs: [{ id_B: 22 }]
}, {
    include: [{
        model: AB,
        as: 'ABs'
    }]
});

【讨论】:

    猜你喜欢
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多