node.js - Sequelize 向关联添加属性

标签 node.js sequelize.js

我有很多横幅的投资组合。

我最初使用 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,我认为我可以通过循环浏览横幅并单独设置每个横幅来使用它。

这是我最近的尝试,但没有奏效。我将横幅设置为空,然后单独添加每个横幅。但似乎发生的是它部分起作用。像这样设置后,一些横幅丢失了。
portfolio.setBanners(null);
banners.forEach(banner => {
    portfolio.addBanner(banner.id, {
        sortOrder: banner.sortOrder
    });
});

所以问题是如何设置关联横幅的 sortOrder?

这是我一直在引用的 Sequelize 文档的链接。
http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/

更新
使用上面的循环方法部分有效,但是说我添加了横幅 1 作为关联。然后我想添加横幅 2。我将所有横幅设置为 null,然后通过横幅 1 和 2 循环使用 addBanner 添加它们,横幅 1 不会持续存在,但横幅 2 将在那里。现在说我添加了横幅 3,横幅 2 将消失,但横幅 1 和 3 将持续存在。

最佳答案

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

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

关于node.js - Sequelize 向关联添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36508966/

相关文章:

node.js - 使用 JSON-Schema 定义模式并使用 Mongoose?

node.js - app.getDeviceLocation() 总是返回 null

database - sequelize 在特定条件下更改数据

javascript - 在 Sequelize js 的范围内同时使用 "AND"和 "OR"

javascript - 如何在nodejs中使用sequelize设置模型验证?

lambda - Lambda 函数中永远不会调用 RDS 与 Sequelize 的连接

node.js - 在 Centos 7 上安装 Nest.js

javascript - 对主要js和从html加载的js脚本之间的状态访问

node.js - 从 Windows 批处理文件返回字符串

node.js - Sequelize - 通过多重关联创建