Laravel Livewire 在 blade 上计算值
Laravel Livewire calculate values on blade
我有一个动态 blade,我将值放在三个文本字段中并将该值存储在数组中。
我的blade看起来像这样
在我的 Laravel Livewire 控制器中,我有以下代码
public $veriProducts = [];
public function render()
{
$products = Product::where('user_id', auth()->user()->id)
->orderBy( $this->sortBy, $this->sortAsc ? 'ASC' : 'DESC');
$products = $products->paginate($this->perPage);
info($this->veriProducts);
return view('livewire.products', [
'items' => $products,
]);
}
public function addProduct()
{
$this->veriProducts[] = ['price' => '', 'quantity' => ''];
}
public function removeProduct($index)
{
unset($this->veriProducts[$index]);
$this->veriProducts = array_values($this->veriProducts);
}
这是我的 blade
<tbody>
@foreach ($veriProducts as $index => $orderProduct)
<tr>
<td>
<input type="number" name="veriProducts[{{$index}}][price]" class="border border-gray-300 form-control my-0 p-1 ring-blue-200 rounded-md" wire:model="veriProducts.{{$index}}.price" />
</td>
<td>
<input type="number" name="veriProducts[{{$index}}][quantity]" class="border border-gray-300 form-control my-0 p-1 ring-blue-200 rounded-md" wire:model="veriProducts.{{$index}}.quantity" />
</td>
<input type="number" name="veriProducts[{{$index}}][total]" class="border border-gray-300 form-control my-0 p-1 ring-blue-200 rounded-md" wire:model="veriProducts.{{$index}}.total" />
</td>
<input type="number" name="veriProducts[{{$index}}][pl]" class="border border-gray-300 form-control my-0 p-1 ring-blue-200 rounded-md" wire:model="veriProducts.{{$index}}.pl" />
</td>
</tr>
@endforeach
它工作正常我可以添加行并且数组 $veriProducts 也可以正常创建。
在数量文本框失去焦点或其他一些
之后,如何计算总数和 P/L
Total will be
price*quanrity
PL will be
20% less then total
非常感谢
假设 PL
和 Total
不可编辑,我们可以使用更新的钩子并相应地设置 total
和 pl
值,
public function updatedVeriProducts()
{
$this->veriProducts = collect($this->veriProducts)
->map(function ($product) {
if ($product['price'] != '' && $product['quantity'] != '') {
$total = $product['price'] * $product['quantity'];
$product['total'] = round($total, 2);
$product['pl'] = round($total * 0.8, 2);
}
return $product;
})->toArray();
}
我使用了 laravel 的 collect
方法来轻松处理数组。
在if
条件下,只有当price
和quantity
都有一些输入值时,我们才启用total
和pl
的计算。
为了避免长小数,我使用 round
函数将其四舍五入到小数点后两位。
我有一个动态 blade,我将值放在三个文本字段中并将该值存储在数组中。
我的blade看起来像这样
在我的 Laravel Livewire 控制器中,我有以下代码
public $veriProducts = [];
public function render()
{
$products = Product::where('user_id', auth()->user()->id)
->orderBy( $this->sortBy, $this->sortAsc ? 'ASC' : 'DESC');
$products = $products->paginate($this->perPage);
info($this->veriProducts);
return view('livewire.products', [
'items' => $products,
]);
}
public function addProduct()
{
$this->veriProducts[] = ['price' => '', 'quantity' => ''];
}
public function removeProduct($index)
{
unset($this->veriProducts[$index]);
$this->veriProducts = array_values($this->veriProducts);
}
这是我的 blade
<tbody>
@foreach ($veriProducts as $index => $orderProduct)
<tr>
<td>
<input type="number" name="veriProducts[{{$index}}][price]" class="border border-gray-300 form-control my-0 p-1 ring-blue-200 rounded-md" wire:model="veriProducts.{{$index}}.price" />
</td>
<td>
<input type="number" name="veriProducts[{{$index}}][quantity]" class="border border-gray-300 form-control my-0 p-1 ring-blue-200 rounded-md" wire:model="veriProducts.{{$index}}.quantity" />
</td>
<input type="number" name="veriProducts[{{$index}}][total]" class="border border-gray-300 form-control my-0 p-1 ring-blue-200 rounded-md" wire:model="veriProducts.{{$index}}.total" />
</td>
<input type="number" name="veriProducts[{{$index}}][pl]" class="border border-gray-300 form-control my-0 p-1 ring-blue-200 rounded-md" wire:model="veriProducts.{{$index}}.pl" />
</td>
</tr>
@endforeach
它工作正常我可以添加行并且数组 $veriProducts 也可以正常创建。 在数量文本框失去焦点或其他一些
之后,如何计算总数和 P/LTotal will be
price*quanrity
PL will be
20% less then total
非常感谢
假设 PL
和 Total
不可编辑,我们可以使用更新的钩子并相应地设置 total
和 pl
值,
public function updatedVeriProducts()
{
$this->veriProducts = collect($this->veriProducts)
->map(function ($product) {
if ($product['price'] != '' && $product['quantity'] != '') {
$total = $product['price'] * $product['quantity'];
$product['total'] = round($total, 2);
$product['pl'] = round($total * 0.8, 2);
}
return $product;
})->toArray();
}
我使用了 laravel 的 collect
方法来轻松处理数组。
在if
条件下,只有当price
和quantity
都有一些输入值时,我们才启用total
和pl
的计算。
为了避免长小数,我使用 round
函数将其四舍五入到小数点后两位。