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

я пытался добавить в корзину я получаю эту ошибку
Аргумент 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 = new Cart ($ oldCart);
Пожалуйста, помогите мне …

-1

Решение

Проблема здесь в вашем конструкторе. На самом деле вы не вызываете «конструктор», который вы определили, но родительский конструктор выполняется. Это потому, что вы пропустите одно подчеркивание, оно должно быть __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);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]