2016-01-13 76 views
1

我正在開發一個包含多個(> 2)表的應用程序,我需要在填充方法 填充帆中的多個表waterline orm

Category.js模式

attributes: { 
    CategoryID:{ 
     type:"integer", 
     required:true, 
     primaryKey:true, 
     autoIncrement:true 
    }, 
    SubCategories:{     //REFERING TO SUB-CATEGORY TABLE 
     collection:'SubCategory', 
     via:'CategoryID' 
    }, 
    CategoryName:{ 
     type:"string", 
     required:true, 
     maxLength:50 
    } 
    } 

這是SubCategory.js模式

attributes: { 
    id:{ 
     type:'integer', 
     required:true, 
     primaryKey:true, 
     autoIncrement:true, 
     maxLength:10, 
     columnName:'SubCategoryID' 
    }, 
    CategoryID:{ 
     model:'Category'     //REFERING TO CATEGORY TABLE 
    }, 
    ProductsOfCategory:{     //REFERING TO PRODUCT TABLE 
     collection:'Product', 
     via:'SubCategoryID' 
    }, 
    SubCategory:{ 
     type:"string", 
     required:true, 
     maxLength:50 
    } 
} 

Product.js模式

attributes: { 
    id: { 
     type: 'integer', 
     primaryKey: true, 
     autoIncrement: true, 
     maxLength: 10, 
     columnName:'ProductID' 
    }, 
    SubCategoryID: { 
     model:'SubCategory' 
    }, 
    ProductDetails:{ 
     collection:'ProductDetails', 
     via:'ProductID' 
    }, 
    ProductName: { 
     type: "string", 
     required: true, 
     maxLength: 50 
    } 
} 

ProductDeatils.js模式

attributes: { 
    id: { 
     type: 'integer', 
     primaryKey: true, 
     autoIncrement: true, 
     maxLength: 10, 
     columnName:'ProductDetailID' 
    }, 
    ProductID:{ 
     model:'Product' 
    }, 
    Size:{ 
     type:"string", 
     required:true, 
     maxLength:10 
    }, 
    Color:{ 
     type:"string", 
     required:true, 
     maxLength:10 
    } 
} 

在填充,我能夠填充類別和子類別每個類別。

Category.find() 
     .populate('SubCategories') 
     .exec(function(err, categories){ 
      if (err) { 
       console.log(err); 
       return res.json(err); 
      } 
      console.log(categories); 
      res.json(categories); 
     }) 

如何填充的上述所有表中的一個去,使得最終的查詢後,我們得到了所有上述細節在一個JSON。

我們得到參加上述所有表的

是具有所有子類類別,其所有產品和所有產品子類有產品的詳細信息在一個JSON

+0

ashishkumar - 我的回答有幫助嗎?如果您發現它有幫助,請您標記爲正確的答案。還有一個(稍微過時但非常相似的)SOF問題。 – arcseldon

回答

1

你問一個很好的問題。目前已在越來越嵌套填入功能爲帆,從字面上幾十發出請求的和永久居民等大規模興趣

看看一些歷史在這裏:

[FEATURE REQUEST] Recursively populate #308 - 我是遲到了,使得2014年10月29日的請求將在歷史記錄中看到。

據我所知,大多數的談話最終會聚在這裏(一兩年帆用戶請求的功能之後):

Deep populate #1052(問題仍然開放作爲寫2016年1月14日

從這個問題的狀態我們現在還不清楚。這兩個鏈接的歷史確實提出了其他人使用的解決方法。

我的hunch是遞歸填充不支持開箱即用。

我在使用水線模型與SailsJS關聯時所做的工作是使用像async.js這樣的包 - 使用類似瀑布的方法來以編程方式顯式地填充子關係。您可以將它與覆蓋您調用的模型的默認toJSON()的操作相結合,以將它們之間的關係(以編程方式填充)添加到JSON響應中。您也可以選擇使用內置的承諾來實現相同的目標。

發現這個(日期,2014)SOF Question它提供了更多的信息。

有人,如果我在最近的Sails或Waterline版本中錯過了此功能,請在這裏糾正我的錯誤 - 在任何項目的發行說明中都找不到任何內容,表示支持。