Cakephp 3:如何对 foreach 循环求和

Cakephp 3: How do you sum a foreach loop

我有一个 AnnualOperatingBudget table。它有很多预算费用。

 public function view($id = null)
    {
        $annualOperatingBudget = $this->AnnualOperatingBudgets->get($id, [
            'contain' => ['Azinstitutions', 
                          'BudgetExpenses', 
                          'BudgetExpenses.ExpenseTitles']
        ]);

        $this->set('annualOperatingBudget', $annualOperatingBudget );

我的 view.ctp

中有一个 foreach 循环
<td class="nonBulletList">

    <?php foreach ($annualOperatingBudget['budget_expenses'] as $expense): ?>

        <li><?= $this->Number->
                       currency($expense->expense, 'USD', ['places' => 1]) ?>
        </li>

   <?php endforeach; ?>

</td>

我需要计算所有这些费用的总和。

我试图将其添加到我的 AnnualOperatingBudgetsController 中:

$expenseResult = $annualOperatingBudget->select(
                   ['expense_sum' => $annualOperatingBudget->
                     func()->sum('BudgetExpenses.expense')])->
                     first(); //perform sum for the current year expenses list

$current_year_expenses = $expenseResult->expense_sum; // total sum result of Expenses

但是我收到一个未定义方法的错误调用 App\Model\Entity\AnnualOperatingBudget::select()

一般来说,您会混淆 EntityTable 函数。获取 returns 一个实体:

 $annualOperatingBudget = $this->AnnualOperatingBudgets->get($id, [

您不能在实体上调用 select,错误试图描述:

$annualOperatingBudget->select( // This won't work

select 函数用于 Query,您通常可以从 Table ,例如:

// Returns a Query object for the AnnualOperatingBudgets table:
$query = $this->AnnualOperatingBudgets->find();

// Add the select and joins to this query
/* @var \Cake\ORM\Query $query */
$expenseResult = $query
    ->join(['BudgetExpenses'])// To sum on this table, you need to join on it too
    ->select([
        'expense_sum' => $query->func()->sum('BudgetExpenses.expense')
    ])
    ->first(); // Will return one row

另一种选择是实际汇总您直接在模板中输出的费用:

<?php
    $totalExpenses = 0;
    foreach ($annualOperatingBudget['budget_expenses'] as $expense) {
    $totalExpenses += $expense->expense;
?>
<li>
    <?= $this->Number->currency($expense->expense, 'USD', ['places' => 1]) ?>
</li>
<?php }; ?>
</td>
<td>
    <li>
        <?= $totalExpenses ?>
    </li>
</td>

可能想阅读一下这些内容: