首页 文章

Sequelize向关联添加属性

提问于
浏览
0

我的投资组合有很多 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 回答

  • 0

    setBanners(null) 之后运行 forEach 似乎是竞争条件 . setBanners 返回一个承诺 . 需要在 setBanners 解析后运行for循环 .

    result.setBanners(null).then(() => {
        banners.forEach(banner => {
            result.addBanner(banner.id, {
                sortOrder: banner.sortOrder
            });
        });
        cb(null, result);
    });
    

相关问题