2016-04-08 23 views
0

Birçok afişe sahip portföyüm var.Sequelize Derneklere Özellik Ekle

Afiş ayarlamak için başlangıçta portfolio.setBanners([1,2,3]) kullanıyorum, sorun değil. Şimdi, pankartların her birine bir sortOrder tamsayı eklemek istiyorum. İşte

Ben dernek kuruyorum:

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' }); 

İşte benim PortfolioBanner modelidir:

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

Ben sortorder değerlerin her farklı olduğu için ben, setBanners kullanabilirsiniz sanmıyorum. Afişler arasında döngü yaparak ve her birini ayrı ayrı ayarlayabileceğimi düşündüğüm addAssociation adlı başka bir yöntem var.

Bu benim en son denememdi, ama işe yaramadı. Bannerları null olarak ayarlıyorum ve ardından her bir banner'ı tek tek ekleyin. Ama öyle görünüyor ki kısmen işe yarıyor. Bazı afişler, bunları bu şekilde ayarladıktan sonra kayboluyor.

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

Yani soru benim ilişkili afiş sortorder ayarlayabilirsiniz nasıl?

Referans verdiğim bu dokümanın belgelerine buradan ulaşabilirsiniz. Kısmen çalışan yukarıda öze yöntemi kullanılarak http://docs.sequelizejs.com/en/latest/api/associations/belongs-to-many/

UPDATE , ancak bir ilişki olarak afiş 1 ekleyin demek. Daha sonra afiş 2'yi eklemek istiyorum. Tüm pankartları null olarak ayarlayın ve ardından afiş 1 ve 2'yi addBanner ile ekleyerek afiş 1 devam etmeyecek, ancak banner 2 orada olacak. Şimdi banner 3 eklediğimi, banner 2'nin gitmeyeceğini, ancak banner 1 ve 3'ün devam edeceğini söylüyorum.

cevap

0

setBanners(null) bir yarış durumu gibi görünüyordu sonra forEach Running. setBanners bir söz verir. For döngüsü setBanners özümleri sonra çalıştırılması gerekiyor.

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