[英]SilverStripe - sum() a limited list of dataobject variables
在SilverStripe中,我只想計算前三個DataObjects
的總和,以得到一個子數量。
我嘗試了以下操作,但該函數始終返回所有DataObjects
的總和,而不僅僅是前三個。
public function getSubSum() {
$service = ServiceProvided::get()->filter(array(
'InvoiceObjectID' => $this->ID
));
$sum = $service->limit(3, 0)->sum('Sum');
return $sum;
}
如何僅計算前三個DataObjects
的總和?
首先計算SUM,然后在已經計算出總和函數之后應用限制。 實際上,您要求它首先計算總和,該總和返回單行,然后將結果限制為三行。
為此,您可能需要使用以下子查詢:
SELECT SUM("Sum") FROM (SELECT "Sum" FROM "ServiceProvided" WHERE ... LIMIT 3)
要在SilverStripe中執行自定義SQL,可以使用DB::query()
。 但是,在執行此操作時需要小心以避免SQL注入。 一個更簡單的方法就是用PHP計算總和。
要在PHP中計算總和,請使用for循環遍歷返回的每個數據庫行,然后將該值添加到變量中。
public function getSubSum() {
$services = ServiceProvided::get()
->filter('InvoiceObjectID', $this->ID)
->limit(3, 0);
$sum = 0;
foreach($services as $service) {
$sum += $service->Sum;
};
return $sum;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.