我有很多横幅的投资组合。
我最初使用 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/