Использование значения контроллера в модели Laravel - PullRequest
0 голосов
/ 26 июня 2018

Это код моей модели, и я пытаюсь получить количество товаров, которое пользователь хочет добавить в свою корзину (количество).Моя проблема в том, как передать значение, которое я получаю в контроллере через запрос к моей модели, потому что оно там, где обрабатываются данные.

Это файл моей модели.Вот как обрабатывается и суммируется количество.

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 для него, и оно правильно передает количество

ProductController

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 View

                <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>

1 Ответ

0 голосов
/ 26 июня 2018

Вы передаете 3 параметра в функцию add() от контроллера.Но он принимает только 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;

}
...