2012-11-04 27 views
1

我正在研究nodejs + sequelize + jade網絡應用程序來學習nodejs。一切基本都很清楚,但現在我想要賭注。我有品牌的對象(桌子)。目標產品與品牌有一對多的關係。我想要做的是找到所有品牌並將其展示在Jade模板中,並列出其中的產品。NodeJS + Sequelize + Jade;在對象上使用hasMany集合

下面是一些基本的代碼

var Brand = sequelize.import(application_root + "/models/brand.js"); 
var Product = sequelize.import(application_root + "/models/product.js"); 
Brand.hasMany(Product, { as: 'Products', foreignKey: 'brand'}); 
Product.belongsTo(Brand, { foreignKey: 'key'}); 

在路線展示品牌和產品我做的;

Brand.findAll().error(errorHandler).success(function(brands) 
    { 
     brands[0].getProducts().success(function(products) { 
     brands[0].products = products; 
     }); 
     res.render('listOfbrands.jade', { title: 'List of brands', items: brands}); 
    }); 

最奇怪的是,我能看到的console.log已經被執行時被解僱的查詢,但它不與品牌的主鍵建立一個正確的查詢。查詢是從產品的選擇*其中,「品牌」是空

此外,我想知道,如果我指定的子集正確通過做這樣

ul 
each item in items 
li(class='brandItem')= item.name 
ul 
each product in item.products 
li=product.name 

回答

1

有訪問它在我玉模板是我學到的兩個原則; 首先要查找每個項目的子項目,必須使用sequelize query chainer。這使我可以查詢所有內容,並在完成後將項目集合添加到我的玉石模板中。其次是利用brands.forEach 所以我最後的代碼是這樣

Brand.findAll().error(errorHandler).success(function(brands) 
{ 
    var chainer = new Sequelize.Utils.QueryChainer(); 
    brands.forEach(function(theBrand) { 
     chainer.add(theBrand.getProducts({where: "brand="+theBrand.key }).error(errorHandler).success(function(products) 
     {     
      theBrand.products = products;     
     })); 
    } 
    chainer.runSerially().success(function(results) { 
     res.render('listOfbrands.jade', { title: 'List of brands', items: brands}); 
    } 
});