将插入插入连接表(多对多)

时间:2017-03-19 02:35:08

标签: node.js postgresql express sequelize.js

我在sequelize中设置了两个具有多对多关系的模型。 Sequelize正确创建了连接表,但我无法插入其中。我一直在研究文档的这一部分:http://docs.sequelizejs.com/en/latest/docs/associations/#creating-with-associations但我根据他们的例子无法得到任何工作。遗憾的是,他们没有多对多的例子。

接下来我尝试使用setModel函数,并且这在sequelize代码的深处产生了一个我无法弄清楚的错误。该代码如下。

我的两个模特是Coin和Ledger。

Ledger.findById(22).then(ledger=>{
    var c1 = Coin.findById(1);
    var c2 = Coin.findById(2);
    ledger.setCoins([c1,c2]).then(sc=>{
        console.log(sc);
    });
});

我的模型使用此代码相互关联:

Ledger.belongsToMany(Coin,{ through: 'ledger_coin'});
Coin.belongsToMany(Ledger, {through: 'ledger_coin'});

任何人都可以给我一些建议或指出我使用get函数或关联选项写入连接表的正确轨道吗?我可以写一个自定义函数,但我知道必须有办法。

2 个答案:

答案 0 :(得分:8)

好吧,我用setCoins解决了上面的问题。显然它需要id号而不是对象,所以这有效:

Ledger.findById(22).then(ledger=>{
    ledger.setCoins([1,2]).then(sc=>{
        console.log(sc);
    });
});

我仍然希望更好地理解包含和关联。

答案 1 :(得分:0)

2019 +

Sequelize 5+之后,findById()findByPk()取代

Ledger.findByPk(22).then(ledger=>{
    ledger.setCoins([1,2]).then(sc=>{
        console.log(sc);
    });
});