我的投资组合有很多 Banner .
我最初使用 portfolio.setBanners([1,2,3])
设置 Banner ,没问题 . 现在我想为每个 Banner 添加一个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,我认为我可以通过循环遍历 Banner 并单独设置每一个来使用 .
这是我最近的尝试,但它没有用 . 我将 Banner 设置为null,然后单独添加每个 Banner . 但似乎发生的是它部分有效 . 设置完毕后,有些 Banner 丢失了 .
portfolio.setBanners(null);
banners.forEach(banner => {
portfolio.addBanner(banner.id, {
sortOrder: banner.sortOrder
});
});
所以问题是我如何设置相关 Banner 的sortOrder?
这是我一直参考的续集文档的链接 . http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/
UPDATE 使用上面的循环方法部分有效,但是我说我将 Banner 1添加为关联 . 然后我想添加 Banner 2.我将所有 Banner 设置为null然后循环 Banner 1和2添加它们 addBanner
, Banner 1将不会持续但 Banner 2将在那里 . 现在说我添加 Banner 3, Banner 2将消失,但 Banner 1和3将保持不变 .
1 回答
在
setBanners(null)
之后运行forEach
似乎是竞争条件 .setBanners
返回一个承诺 . 需要在setBanners
解析后运行for循环 .