簡體   English   中英

SilverStripe-sum()數據對象變量的有限列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM