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

非常感谢

假设 PLTotal 不可编辑,我们可以使用更新的钩子并相应地设置 totalpl 值,


    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条件下,只有当pricequantity都有一些输入值时,我们才启用totalpl的计算。

为了避免长小数,我使用 round 函数将其四舍五入到小数点后两位。