2016-04-08 21 views
0

私は多くのバナーを持つポートフォリオを持っています。Sequelizeアソシエーションに属性を追加する

最初にportfolio.setBanners([1,2,3])を使用してバナーを設定しましたが問題ありません。今度は、各バナーにsortOrder整数を追加したいと思います。ここで私が連想設定しています

const PortfolioBanners = sequelize.define('PortfolioBanner', { 
    sortOrder: { 
     type: DataTypes.INTEGER, 
     defaultValue: 0 
    } 
}); 

私ははsortOrder値のそれぞれが異なっているので、私は、setBannersを使用することができるとは思わない:ここでは

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モデルです。 addAssociationという別のメソッド呼び出しがあります。これは、バナーをループして個別に設定することで使用できると考えていました。

これは私の最新の試みでしたが、うまくいきませんでした。バナーをnullに設定して、各バナーを個別に追加します。しかし、起こりそうなことは、それが部分的に機能するということです。バナーの一部は、このように設定した後に欠落しています。

したがって、関連するバナーのsortOrderを設定するにはどうすればよいですか?

ここに私が参照している続編文書へのリンクがあります。 http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/

部分的に動作します上記ループ方式を使用してUPDATE は、しかし、私は協会としてバナー1を追加しますと言います。次に、バナー2を追加したいと思います。すべてのバナーをnullに設定し、バナー1と2をループしてaddBannerを追加すると、バナー1は保持されますが、バナー2がそこにあります。今、私はバナー3を追加すると、バナー2はなくなりますが、バナー1と3は持続します。

答えて

0

setBanners(null)の後にforEachを実行することは、競合状態であるようでした。 setBannersは約束を返します。 forループは、setBannersの解決後に実行する必要があります。

result.setBanners(null).then(() => { 
    banners.forEach(banner => { 
     result.addBanner(banner.id, { 
      sortOrder: banner.sortOrder 
     }); 
    }); 
    cb(null, result); 
}); 
関連する問題