在模型中使用控制器的值 Laravel

Using value of controller in the model Laravel

这是我的型号代码,我要获取的是用户想要添加到他的购物车中的产品数量(数量)。我的问题是如何通过请求将我在控制器中获得的值传递给我的模型,因为它在那里处理数据。

这是我的模型文件。以下是数量的处理和求和方式。

Cart.php

    class Cart extends Model
{
    public $items = null;
    public $totalQty = 0;
    public $totalPrice = 0;

    public function __construct($oldCart)
    {
        if ($oldCart)
        {
            $this->items = $oldCart->items;
            $this->totalQty = $oldCart->totalQty;
            $this->totalPrice = $oldCart->totalPrice;
        }
    }

    public function add($item, $id)
    {
        $storedItem = ['qty' => 0, 'price' => $item->price, 'item' => $item];
        if ($this->items)
        {
            if(array_key_exists($id, $this->items))
            {
                $storedItem = $this->items[$id];
            }
        }
        $storedItem['qty']++;
        $storedItem['price'] = $item->price * $storedItem['qty'];
        $this->items[$id] = $storedItem;
        $this->totalQty++;
        $this->totalPrice += $item->price;
    }
}

在这里您可以看到我是如何从视图中获取数量的。我对它做了一个 $dd,它正确地传递了数量

产品控制器

public function addCart(Request $request) {
        $id = request('product_id');
        $qty = request('qty');
        $product = Product::find($id);
        $oldCart = Session::has('cart') ? Session::get('cart') : null;
        $cart = new Cart($oldCart);
        $cart->add($product, $id, $qty);

        $request->session()->put('cart', $cart);

        return redirect()->route('user.cart');
    }

这是视图的一部分。在那里您可以看到我如何创建用于传递数据的表单。

Show.blade 查看

                <form action="{{ route('user.addCart') }}">
                    <h6 class="text-muted">Qty :</h6>
                    <select name="qty" id="qty" class="mr-2">
                        <option value="1">1</option>
                        <option value="2">2</option>
                        <option value="3">3</option>
                        <option value="4">4</option>
                        <option value="5">5</option>
                        <option value="6">6</option>
                        <option value="7">7</option>
                        <option value="8">8</option>
                        <option value="9">9</option>
                        <option value="10">10</option>
                        <option value="11">11</option>
                        <option value="12">12</option>
                    </select>
                    <input type="hidden" name="product_id" value="{{ $product->id }}">
                    <button type="submit" class="btn btn-primary" style="border-radius: 20px;" role="button">Add to <i class="fas fa-shopping-cart"></i></button>        
                </form>

您正在从控制器向 add() 函数传递 3 个参数。但它只接受 2 个参数。您必须向 add() 函数添加另一个参数。

public function add($item, $id, $quantity = 1)
{
    $storedItem = ['qty' => 0, 'price' => $item->price, 'item' => $item];
    if ($this->items)
    {
        if(array_key_exists($id, $this->items))
        {
            $storedItem = $this->items[$id];
        }
    }
    $storedItem['qty'] += $quantity;
    $storedItem['price'] = $item->price * $storedItem['qty'];
    $this->items[$id] = $storedItem;
    $this->totalQty += $quantity;
    $this->totalPrice += $item->price;

}