Yii2 - 如何获得计算数字的总和
Posted
技术标签:
【中文标题】Yii2 - 如何获得计算数字的总和【英文标题】:Yii2 - How to get the sum of computational figures 【发布时间】:2017-09-20 13:22:31 【问题描述】:我正在 yii2 中处理发票,其中存储了项目 price
和 qnty
,但每个项目的 amount
是由 qnty
和 price
的乘积计算的。
我现在想在发票下方获取发票的totals
,这个数字将是发票项目的所有amounts
的总和。请记住 amount
的值是计算而不是存储的,我如何从这些数字计算 totals
?
请注意,我无法直接从数据库表中获取值,因为 price
值是其他函数的派生值。
这是我的看法:
<?php
use yii\helpers\html;
use yii\widgets\DetailView;
/* @var $this yii\web\View */
/* @var $model app\models\RepeatInvoice */
$this->title = 'Invoice';
$this->params['breadcrumbs'][] = ['label' => 'Repeat Invoices', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="repeat-invoice-view">
<h1 align="center"><?= Html::encode($this->title) ?></h1>
<p align="right">
<?= Html::a('Print', ['update', '#' => $model->id], ['class' => 'btn btn-default']) ?>
<?= Html::a('Export to PDF', ['#', 'id' => $model->id], ['class' => 'btn btn-default']) ?>
<?= Html::a('Email Invoice', ['#', 'id' => $model->id], ['class' => 'btn btn-default']) ?>
</p>
<!-- invoice -->
<section class="invoice">
<!-- title row -->
<div class="row">
<div class="col-xs-12">
<h2 class="page-header">
<i class="fa fa-globe"></i> <?php echo $model->company->name; ?>
<small class="pull-right">Date Created: <?php echo date("jS F, Y", strtotime($model->created_at)) ?></small>
</h2>
</div>
<!-- /.col -->
</div>
<!-- info row -->
<div class="well row">
<div class="col-sm-3">
<p>
Repeat the invoice every
</p>
<p><strong>
<?php echo $model->repeat_every.' '.$model->repeat_period; ?>
</strong></p>
</div>
<div class="col-sm-3">
<p>
Start Date
</p>
<p><strong>
<?php echo date("jS F, Y", strtotime($model->start_date)) ?>
</strong></p>
</div>
<div class="col-sm-3">
<p>
Due Date
</p>
<p><strong>
<?php echo $model->dueDate; ?>
</strong></p>
</div>
<div class="col-sm-3">
<p>
End Date
</p>
<p><strong>
<?php echo date("jS F, Y", strtotime($model->end_date)) ?>
</strong></p>
</div>
</div>
<div class="well row">
<div class="col-sm-3">
<p>
Tenant
</p>
<p><strong>
<?php echo $model->lease->tenant->tenantName; ?>
</strong></p>
</div>
<div class="col-sm-6">
<p>
Tenancy
</p>
<p><strong>
<?php echo $model->lease->leaseDetails; ?>
</strong></p>
</div>
<div class="col-sm-3">
<p>
Payable to:
</p>
<p><strong>
<?php echo $model->due_after_every.' '.$model->due_after_period; ?>
</strong></p>
</div>
</div>
<!-- Table row -->
<div class="row">
<div class="col-xs-12 table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Item</th>
<th>Description</th>
<th>Qty</th>
<th>Price</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<?php foreach ($repeatInvoiceItems as $indexItem => $repeatInvoiceItem): ?>
<tr>
<td>
<?php echo $repeatInvoiceItem->item->item; ?>
</td>
<td>
<?php echo $repeatInvoiceItem->desc; ?>
</td>
<td>
<?php echo $repeatInvoiceItem->qnty; ?>
</td>
<td>
<?php echo $repeatInvoiceItem->itemPrice; ?>
</td>
<td>
<?php echo $repeatInvoiceItem->qnty * $repeatInvoiceItem->itemPrice; ?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
<!-- /.col -->
</div>
<!-- /.row -->
<div class="row">
<!-- accepted payments column -->
<div class="col-xs-6">
<p class="lead">Payment Instructions:</p>
<p class="text-muted well well-sm no-shadow" style="margin-top: 10px;">
<?php echo $model->payment_instructions; ?>
</p>
</div>
<!-- /.col -->
<div class="col-xs-6">
<div class="table-responsive">
<table class="table">
<tr>
<th style="width:50%">Subtotal:</th>
<td>$250.30</td>
</tr>
<tr>
<th>Tax (9.3%)</th>
<td>$10.34</td>
</tr>
<tr>
<th>Total:</th>
<td>$265.24</td>
</tr>
</table>
</div>
</div>
<!-- /.col -->
</div>
<!-- /.row -->
<!-- this row will not appear when printing -->
<div class="row no-print">
<div class="col-xs-12">
<a href="#" target="_blank" class="btn btn-default"><i class="fa fa-print"></i> Back</a>
<button type="button" class="btn btn-default pull-right"><i class="fa fa-credit-card"></i> Edit Invoice
</button>
<button type="button" class="btn btn-default pull-right" style="margin-right: 5px;">
<i class="fa fa-download"></i> Add Note
</button>
</div>
</div>
</section>
<!-- /.invoice -->
</div>
【问题讨论】:
【参考方案1】:创建变量
$lineItemPrice
: 存储订单项价格
$subTotal
:存储所有行/行,即$lineItemPrice
商品价格。
在 foreach 循环中的 $subTotal
中添加所有 $lineItemPrice
。并且,显示在您想要显示的末尾。要显示Total
,需要用tax
计算$subTotal
并显示在Total
列中。
代码
<div class="row">
<div class="col-xs-12 table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>Item</th>
<th>Description</th>
<th>Qty</th>
<th>Price</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<?php
$subTotal = 0;
foreach ($repeatInvoiceItems as $indexItem => $repeatInvoiceItem): ?>
<tr>
<td>
<?php echo $repeatInvoiceItem->item->item; ?>
</td>
<td>
<?php echo $repeatInvoiceItem->desc; ?>
</td>
<td>
<?php echo $repeatInvoiceItem->qnty; ?>
</td>
<td>
<?php echo $repeatInvoiceItem->itemPrice; ?>
</td>
<td>
<?php
$lineItemPrice = $repeatInvoiceItem->qnty * $repeatInvoiceItem->itemPrice;
echo $lineItemPrice;
$subTotal += $lineItemPrice;
?>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</div>
</div>
<div class="row">
<div class="col-xs-6">
<p class="lead">Payment Instructions:</p>
<p class="text-muted well well-sm no-shadow" style="margin-top: 10px;">
<?php echo $model->payment_instructions; ?>
</p>
</div>
<div class="col-xs-6">
<div class="table-responsive">
<table class="table">
<tr>
<th style="width:50%">Subtotal:</th>
<td>$<?php echo number_format($subTotal,2);?></td>
</tr>
<tr>
<th>Tax (9.3%)</th>
<td>$10.34</td>
</tr>
<tr>
<th>Total:</th>
<td>$265.24</td>
</tr>
</table>
</div>
</div>
</div>
对于总计,
<div class="col-xs-6">
<div class="table-responsive">
<table class="table">
<tr>
<th style="width:50%">Subtotal:</th>
<td>$<?php echo number_format($subTotal,2);?></td>
</tr>
<?php
$tax = 9.3;
?>
<tr>
<th>Tax (9.3%)</th>
<td>
<?php
echo $taxAmount = ($tax * $subTotal)/100;
?>
</td>
</tr>
<tr>
<th>Total:</th>
<td>
<?php echo $grandTotal = $subTotal + $taxAmount;?>
</td>
</tr>
</table>
</div>
</div>
【讨论】:
哇,如此简单明了,我从没想过那一行。非常感谢。我会接受答案。 是的。不过这很容易。没问题。我们从错误中学习。继续编码。享受。 @japheth以上是关于Yii2 - 如何获得计算数字的总和的主要内容,如果未能解决你的问题,请参考以下文章