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()
一般来说,您会混淆 Entity 和 Table 函数。获取 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>
可能想阅读一下这些内容:
我有一个 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()
一般来说,您会混淆 Entity 和 Table 函数。获取 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>
可能想阅读一下这些内容: