Аргумент 1, передаваемый в Illuminate \ Database \ Eloquent \ Model :: __ construct (), должен иметь тип массива, заданный объект, - PullRequest
0 голосов
/ 28 сентября 2018

Я пытался добавить в корзину, и я продолжаю получать эту ошибку. Аргумент 1 передается в Illuminate \ Database \ Eloquent \ Model :: __ construct () должен иметь тип массива, данный объект вызывается в C: \ xampp \ htdocs \ laravelcart\ app \ Http \ Controllers \ ProductController.php

вот мой код

модель cart.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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



product controller
<?php

namespace App\Http\Controllers;

use App\Product;
use Session;
use App\Cart;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    //

    public function getIndex()
    {
        $products = Product::all();
        return view('shop.index', compact('products'));
    }

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

        $request->session()->put('cart', $cart);
        return redirect()->route('shop.index');

    }
}

Кажется, моя ошибка исходит от $ cart =новая корзина ($ oldCart);Пожалуйста, помогите мне ...

1 Ответ

0 голосов
/ 28 сентября 2018

Проблема здесь в вашем конструкторе.На самом деле вы не вызываете «конструктор», который вы определили, но родительский конструктор выполняется.Это потому, что вы пропустили одно подчеркивание, оно должно быть __construct.

Однако не стоит делать это так.Прежде всего, вы должны вызвать родительский конструктор, и, кроме того, такой пользовательский конструктор может вызвать проблемы в некоторых сценариях.

Гораздо лучше добавить метод следующим образом:

public static function restoreCart($oldCart)
{
    $cart = new static();

    if ($oldCart) {
        $cart->items = $oldCart->items;
        $cart->totalQty= $oldCart->totalQty;
        $cart->totalPrice = $oldCart->totalPrice;
    }

    return $cart;
}

, а затем в вашем контроллере вместо:

$cart = new Cart($oldCart);

вы можете использовать:

$cart = Cart::restoreCart($oldCart);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...