Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

nhayder's avatar
Level 13

Cart session adding product options list in PHP

Hey, this is taking more than i thought it anticipated,

On my shopping cart app i'm adding product to a cart session, Please keep in mind that every product can have list of variations (color, size, memory... etc).

the code that i have currently is working for me except that i can't add a list of variation for a single product i can only replace current variation only.

This is my cart object when running

{{print_r($cart)}}

App\Cart Object
(
    [items] => Array
        (
            [27] => Array
                (
                    [id] => 27
                    [name] => product with variation and colors
                    [slug] => iphone-pro13
                    [price] => 100
                    [prefix] => QAR
                    [qty] => 1
                    [poster] => /image/md/9964677a-c957-4510-9eb4-f41578c069b3
                    [subtotal] => 730
                    [quotable] => 0
                    [variations] => Array // these are the list of product variations 
                        (
                            [16] => Array
                                (
                                    [id] => 16
                                    [var_name] => This is the variation
                                    [var_price] => 365.00
                                    [var_qty] => 1
                                    [var_subtotal] => 365
                                    [color_code] => #e6bf00
                                )

                        )

                )

            [12] => Array
                (
                    [id] => 12
                    [name] => Dolore quis sunt reiciendis.
                    [slug] => iste-autem-beatae-eaque-natus-distinctio
                    [price] => 96.08
                    [prefix] => QAR
                    [qty] => 1
                    [poster] => /media/default/product-placeholder.jpg
                    [subtotal] => 350.692
                    [quotable] => 0
                    [variations] => Array // these are the list of product variations 
                        (
                            [0] => Array
                                (
                                    [var_name] => This is the variation 2
                                    [var_price] => 335.00
                                    [var_qty] => 1
                                    [var_subtotal] => 365
                                    [color_code] => #e6bf00
                                )

                        )

                )

        )

the is my cart.php class

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;

class Cart extends Model
{
    public $items       = null;
    public $itemsCount  = 0;
    public $grandTotal  = 0;
    public $variations  = null;

    public function __Construct($oldCart = null) {

        if($oldCart) {
            $this->items        = $oldCart->items;
            $this->itemsCount   = $oldCart->itemsCount;
            $this->grandTotal   = $oldCart->grandTotal;
            $this->variations   = $oldCart->variations;
        }

    }
    public function add($product) {
        if (isset($this->items)) {
            if( array_key_exists($product->id, $this->items) ) {
                $qty = $this->items[$product->id]['qty'] += $product->qty;
                $subtotal = $qty * $product->price;
            }else{
                $qty = $product->qty;
                $subtotal = $product->subtotal;
            }
         }else{
            $qty = $product->qty;
            $subtotal = $product->subtotal;
        }
        
        $item = [
            'id'        => $product->id,
            'name'      => $product->name,
            'slug'      => $product->slug,
            'price'     => $product->price,
            'prefix'    => $product->prefix,
            'qty'       => $qty,
            'poster'    => $product->poster,
            'subtotal'  => $subtotal,
            'quotable'  => $product->quotable,
            
        ];
        $variations = [
                'id' => $product->variation_id,
                'var_name' => $product->variation,
                'var_price' => $product->variation_price,
                'var_qty' => $qty,
                'var_subtotal' => $qty * $product->variation_price,
                'color_code' => $product->color,
        ];

        $this->items[$product->id] = $item; // <-- this adds new product
        $this->items[$product->id]['variations'][$product->variation_id] = $variations; // <-- this adds new product variation
        $this->itemsCount +=1;
        $this->grandTotal += $product->price * $product->qty; 
    }
}

Not sure where my code went wrong but i need to be able to add list of product variations instead of replacing current ones.

any ideas?

0 likes
0 replies

Please or to participate in this conversation.