есть класс который отвечает за работу корзины
<?php
namespace App\System\Library;
use App\Models\Cart;
use Illuminate\Support\Facades\DB;
class ShopCart
{
private $data = array();
private $session;
public function __construct($session)
{
$session = new ShopSession();
$this->session = $session->getUserSessionIdFromCookies();
}
public function products(){
$product_data = array();
$cart_query = Cart::where('session_id','=', $this->session)->get();
foreach ($cart_query as $cart) {
$stock = true;
$product_query = DB::table('products as p')
->leftJoin('product_descriptions as pd','pd.product_id','=', 'p.id')
->select('p.*','pd.name')
->where('p.id','=', $cart->product_id)
->where('pd.language_id','=', 1)
->where('p.published','=', 1)->first();
if ($product_query && ($cart['quantity'] > 0)) {
$price = $product_query->price;
$product_data[] = array(
'quantity' => $cart->quantity,
'total' => $price * $cart->quantity
);
} else {
$this->remove($cart->d);
}
}
return $product_data;
}
public function add($product_id){
$cart = Cart::where('session_id','=', $this->session)
->where('product_id','=', $product_id)->first();
if ($cart){
$cart->update([
'quantity' => $cart->quantity + 1
]);
}else{
$cart = new Cart();
$cart->user_id = 0;
$cart->product_id = $product_id;
$cart->session_id = $this->session;
$cart->save();
}
return $cart->quantity;
}
public function total() {
$product_total = 0;
$products = $this->products();
foreach ($products as $product) {
$product_total += $product['quantity'];
}
return $product_total;
}
public function remove($cart_id){
ShopCart::find($cart_id)->delete();
}
}
класс с сессиями
<?php
namespace App\System\Library;
use Illuminate\Support\Facades\Cookie;
class ShopSession
{
public function getUserSessionIdFromCookies(){
if (Cookie::get('session_id'))
$session_id = Cookie::get('session_id');
else{
Cookie::put('session_id', substr(bin2hex(random_bytes(26)), 0, 26), time() + 3600*24*30*365);
$session_id = Cookie::get('session_id');
}
return $session_id;
}
}
при добавлении товара в контроллере
class CartController extends Controller
{
protected function put(CartRequest $request){
$cart = new ShopCart();
$cart->addProductToCart((int)$request->itemId);
$total = $cart::countProducts();
}
}
выдает
Non-static method App\System\Library\ShopCart::countProducts() should not be called statically