[英]Aggregate nested model data in Sails.JS/Waterline
我正在努力將我的業務邏輯放在我的SailsJS項目中。
我的數據模型如下:
Portfolio (hasMany) -> Positions (hasOne) -> Asset-> (hasMany) Ticks
我正在尋找使用父模型上的計算屬性來匯總子項的數據,一直到項目組合。 eG an Asset知道最新的價格(價格),該位置知道其當前價格(numberShares *其資產的最新Tick)等。理想情況下,我想將此數據添加到JSON,以便我可以將業務邏輯從Ember客戶端移開。
這適用於一個級別,但如果我嘗試使用子級的計算屬性,它是非定義的或使用toJSON()為空時
Asset.js:
latestTick: function () {
if (this.ticks.length> 0)
{
this.ticks.sort(function(a, b){
var dateA=new Date(a.date), dateB=new Date(b.date)
return dateB-dateA
})
return this.ticks[Object.keys(this.ticks)[0]].price;
}
return 0;
},
toJSON: function() {
var obj = this.toObject();
if (typeof this.latestTick === 'function')
obj.latestTick = this.latestTick();
return obj;
}
這是有效的(在添加類型檢查后,根據它是否被嵌套返回它不起作用)。
現在在Position.js
assetID:{
model: "Asset",
},
我想計算currentValue:
currentValue: function () {
return this.assetID.latestTick() * this.numberShares;
},
這不起作用,因為該功能不可用(只有硬編碼屬性)。 我嘗試使用Tick.Find()...但遇到異步問題(在獲取數據之前返回JSON)。
我試圖強制嵌入/填充JSON中的關聯,但它沒有任何區別。 一旦我跨越多個層次結構級別,我就不會獲得任何數據。
我應該在哪里進行這種聚合? 我不想使用自定義控制器操作,而是利用REST API。
水線不支持深層人口。 如果你想實現這樣的深度查詢,你可以使用native
( https://sailsjs.com/documentation/reference/waterline-orm/models/native ),如果你使用的是Sails <1或者manager
( https:/ /sailsjs.com/documentation/reference/waterline-orm/datastores/manager )如果你使用Sails> = 1
這樣,您可以使用您的數據庫能夠構建此類“更高級”查詢的任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.