我的投资组合有很多横幅。
我最初使用portfolio.setBanners([1,2,3])
设置横幅,没问题。现在我想为每个横幅添加一个sortOrder整数。
我在这里设置关联:
Portfolio.belongsToMany(models.Version, { through: models.PortfolioBanner, foreignKey: 'portfolioId', otherKey: 'versionId', as: 'banners' });
Version.belongsToMany(models.Portfolio, { through: models.PortfolioBanner, foreignKey: 'versionId', otherKey: 'portfolioId', as: 'portfolios' });
这是我的PortfolioBanner
模型:
const PortfolioBanners = sequelize.define('PortfolioBanner', {
sortOrder: {
type: DataTypes.INTEGER,
defaultValue: 0
}
});
我认为我不能使用setBanners,因为每个sortOrder值都不同。还有另一种方法叫做addAssociation,我认为我可以通过循环遍历横幅并单独设置每个方法来使用。
这是我最近的尝试,但它没有奏效。我将横幅设置为null,然后单独添加每个横幅。但似乎发生的是它部分有效。设置完毕后,有些横幅丢失了。
portfolio.setBanners(null);
banners.forEach(banner => {
portfolio.addBanner(banner.id, {
sortOrder: banner.sortOrder
});
});
所以问题是我如何设置相关横幅的sortOrder?
以下是我参考的续集文档的链接。 http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
更新
使用上面的循环方法部分有效,但是我说我将横幅1添加为关联。然后我想添加横幅2.我将所有横幅设置为null然后循环横幅1和2添加addBanner
,横幅1将不会保留,但横幅2将在那里。现在说我添加横幅3,横幅2将消失,但横幅1和3将保持不变。
答案 0 :(得分:0)
在forEach
之后运行setBanners(null)
似乎是竞争条件。 setBanners
返回一个承诺。需要在setBanners
结算后运行for循环。
result.setBanners(null).then(() => {
banners.forEach(banner => {
result.addBanner(banner.id, {
sortOrder: banner.sortOrder
});
});
cb(null, result);
});