PHP code example of joelwmale / laravel-cart

1. Go to this page and download the library: Download joelwmale/laravel-cart library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

joelwmale / laravel-cart example snippets


// Add an item to the cart
\Cart::add(
    1, // any unique id
    'Product 1', // product name
    19.99, // product price
    2, // quantity
    ['size' => 'large'] // an array of extra attributes
);

// get the entire cart
$cartContents = \Cart::getContent();

// update an item already in the cart
\Cart::update(
    1, // the same unique id that was used to add the item
    ['quantity' => 3] // the quantity to update
);

// remove the item by its id
\Cart::remove(1);

// get the total of the cart
$total = Cart::getTotal();

// clear it all when you've finished (like when you've stored the order)
\Cart::clear();

php artisan vendor:publish --provider="Joelwmale\Cart\CartServiceProvider" --tag="config"

'format_numbers' => env('LARAVEL_CART_FORMAT_VALUES', false),
'round_mode' => env('LARAVEL_CART_ROUND_MODE', 'down'),

'decimals' => env('LARAVEL_CART_DECIMALS', 2),

'round_mode' => env('LARAVEL_CART_ROUND_MODE', 'down'),

// Binds the cart to a unique id (user id, session id, etc.)
\Cart::setSessionKey(User::first()->id);

// Add a simple product to the cart
Cart::add(
    455, # product id
    'Sample Item', # product name
    100.99, # product price
    2, # quantity
    [] # optional attributes
);

// array format
Cart::add([
    456, # product id
    'Leather Shoes', # product name
    187, # product price
    1, # quantity
    [] # optional attributes
]);


// add an item with attributes
Cart::add([
    457, // product id
    'T-Shirt', // product name
    29.99, // product price
    1, // quantity
    [
        'size' => 'L',
        'color' => 'Blue'
    ] // attributes
]);

// add an item with conditions
Cart::add([
    458, // product id
    'Headphones', // product name
    199.99, // product price
    1, // quantity
    [], // attributes
    [
        [
            'name' => '10% Off', 
            'type' => 'discount', 
            'value' => '-10%'
        ]
    ] // conditions
]);

// add multiple items at one time
Cart::add(
    [
        456, # product id
        'Leather Shoes', # product name
        187, # product price
        1, # quantity
        [] # optional attributes
    ],
    [
        431, # product id
        'Leather Jacket', # product name
        254.50, # product price
        1, # quantity
        [] # optional attributes
    ]
);

Cart::update(
    456, # product id
    [   
        'name' => 'New Item Name', // new item name
        'price' => 98.67, // new item price as a float or string
    ]
);

// updating a product's quantity
Cart::update(
    456, # product id
    [
    'quantity' => 2, // by default adding the quantity (so if from 4 to 6)
    ]
);

// reducing it...
Cart::update(
    456, 
    [
        'quantity' => -1, // so if from 4 to 3
    ]
);

// you can replace the quantity by setting relative to false
Cart::update(
    456, # product id
    [
        'quantity' => [
            'relative' => false,
            'value' => 5 // if the quantity was 2, it will now be 5
        ],
    ]
);

// Remove an item from the cart by its id
Cart::remove(456);

// Get an item from the cart by its id
Cart::get(456);

// You can also get the total price of the item
$summedPrice = Cart::get($itemId)->getPriceSum();

// Returns a collection of the cart's contents
$cartData = Cart::getContent();

// Gets the total number of items (not quantity) in the cart
$cartCollection->count();

// Transform the collection to an array or a JSON
$cartCollection->toArray();
$cartCollection->toJson();

$cartTotalQuantity = Cart::getTotalQuantity();

$subTotal = Cart::getSubTotal();

$subTotalWithoutConditions = Cart::getSubTotalWithoutConditions();

$total = Cart::getTotal();

Cart::isEmpty();

Cart::clear();

Cart::clearItems();

// Add a single condition to the cart
$condition = new \Joelwmale\Cart\CartCondition([
    'name' => 'Tax: 10%',
    'type' => 'tax',
    'target' => 'subtotal', // this condition will be applied to cart's subtotal when getSubTotal() is called.
    'value' => '10%',
    'attributes' => [ // add extra attributes here
    	'description' => 'Compulsory tax',
    ]
]);

Cart::condition($condition);

// Add multiple conditions
$tax = new \Joelwmale\Cart\CartCondition([
    'name' => 'Tax: 10%',
    'type' => 'tax',
    'target' => 'subtotal', // this condition will be applied to cart's subtotal when getSubTotal() is called.
    'value' => '10%',
    'order' => 2
]);

$shipping = new \Joelwmale\Cart\CartCondition([
    'name' => 'Shipping: $15',
    'type' => 'shipping',
    'target' => 'subtotal', // this condition will be applied to cart's subtotal when getSubTotal() is called.
    'value' => '+15',
    'order' => 1
]);

Cart::condition($tax);
Cart::condition($shipping);

// or as an array
Cart::condition([$tax, $shipping]);

// add condition to only apply on totals, not in subtotal
$shipping = new \Joelwmale\Cart\CartCondition([
    'name' => 'Express Shipping $15',
    'type' => 'shipping',
    'target' => 'total',
    'value' => '+15',
    'order' => 1
]);

Cart::condition($shipping);

// To get all applied conditions on a cart, use below:
$cartConditions = Cart::getConditions();

foreach($cartConditions as $condition)
{
    $condition->getTarget(); // the target of which the condition was applied
    $condition->getName(); // the name of the condition
    $condition->getType(); // the type
    $condition->getValue(); // the value of the condition
    $condition->getOrder(); // the order of the condition
    $condition->getMinimum(); // the minimum dollar amount of the target, needed to activate the condition
    $condition->getMaximum(); // the maximum dollar amount of the target, needed to keep the condition active
    $condition->getAttributes(); // the attributes of the condition, returns an empty [] if no attributes added
}

$cartConditions = Cart::getConditions(true);
$cartConditions = Cart::getConditions(active: true);

foreach ($cartConditions as $condition) {
    $condition['name']; // the name of the condition
    $condition['type']; // the type
    $condition['value']; // the value of the condition
    $condition['order']; // the order of the condition
    $condition['minimum']; // the minimum dollar amount of the target, needed to activate the condition
    $condition['maximum']; // the maximum dollar amount of the target, needed to keep the condition active
    $condition['attributes']; // the attributes of the condition, returns an empty [] if no attributes added
}

$condition = Cart::getCondition('GST');

$condition->getTarget(); // the target of which the condition was applied
$condition->getName(); // the name of the condition
$condition->getType(); // the type
$condition->getValue(); // the value of the condition
$condition->getMinimum(); // the minimum dollar amount of the target, needed to activate the condition
$condition->getMaximum(); // the maximum dollar amount of the target, needed to keep the condition active
$condition->getAttributes(); // the attributes of the condition, returns an empty [] if no attributes added

$tenPercentOff = new CartCondition([
    'name' => '10% Off',
    'type' => 'discount',
    'target' => 'subtotal',
    'value' => '-10%',
    'minimum' => 120,
    'order' => 1,
]);

Cart::getConditions(active: true);

// will return "10% Off" if the subtotal of the cart is $200.
// will return no conditions if the subtotal is $100.

$shipping = new CartCondition([
    'name' => 'Shipping',
    'type' => 'discount',
    'target' => 'subtotal',
    'value' => '10',
    'maximum' => 200,
    'order' => 1,
]);

Cart::getConditions(active: true);

// will return "Shipping" if the subtotal of the cart is less than or equal 200
// will return no conditions if the subtotal is $210

$subTotal = Cart::getSubTotal();
$condition = Cart::getCondition('10% GST');
$conditionCalculatedValue = $condition->getCalculatedValue($subTotal);

Cart::add([
    'id' => 1,
    'name' => 'Apple iPhone 15',
    'price' => 200,
    'quantity' => 1,
    'attributes' => [],
]);

$couponDiscount = new CartCondition([
    'name' => 'Coupon Discount',
    'type' => 'discount',
    'target' => 'subtotal',
    'value' => '-200',
    'order' => 1,
]);

$giftCard = new CartCondition([
    'name' => 'Gift Card',
    'type' => 'discount',
    'target' => 'subtotal',
    'value' => '-200',
    'order' => 2,
]);

Cart::getCalculatedValueForCondition('Coupon Discount'); // returns 200
Cart::getCalculatedValueForCondition('Gift Card'); // returns 0 as the coupon discount is applied first and brings the subtotal to 0

$tenPercentOff = new CartCondition([
    'name' => '10% Off',
    'type' => 'discount',
    'target' => 'subtotal',
    'value' => '-10%',
    'minimum' => 120,
    'order' => 1,
]);

Cart::condition($tenPercentOff)

$shipping = new CartCondition([
    'name' => 'Shipping',
    'type' => 'discount',
    'target' => 'subtotal',
    'value' => '12',
    'maximum' => 200,
    'order' => 1,
]);

Cart::condition($shipping)


// lets create first our condition instance
$saleCondition = new \Joelwmale\Cart\CartCondition([
    'name' => '50% Off',
    'type' => 'tax',
    'value' => '-50%',
]);

// Create the product data with the condition
$product = [
    'id' => 456,
    'name' => 'Sample Item 1',
    'price' => 100,
    'quantity' => 1,
    'attributes' => [],
    'conditions' => $saleCondition
];

// Now add the product to the cart
Cart::add($product);

// You can of course also do multiple conditions on an item
$saleCondition = new \Joelwmale\Cart\CartCondition([
    'name' => 'SALE 5%',
    'type' => 'sale',
    'value' => '-5%',
]);

$discountCode = new CartCondition([
    'name' => 'Discount Code',
    'type' => 'promo',
    'value' => '-25',
]);

$item = [
    'id' => 456,
    'name' => 'Sample Item 1',
    'price' => 100,
    'quantity' => 1,
    'attributes' => [],
    'conditions' => [$saleCondition, $discountCode]
];

Cart::add($item);

// the subtotal will be calculated based on the conditions added that has target => "subtotal"
// and also conditions that are added on per item
$cartSubTotal = Cart::getSubTotal();

$condition = new CartCondition([
    'name' => 'COUPON 101',
    'type' => 'coupon',
    'value' => '-5%',
]);

Cart::addItemCondition(456, $condition);

Cart::clearCartConditions()

Cart::clearAllConditions()

Cart::removeCartCondition('Summer Sale 5%')

Cart::removeItemCondition(456, 'SALE 5%')

Cart::clearItemConditions(456)

$tax = Cart::getConditionsByType('tax');

Cart::removeConditionsByType('tax');

// With no conditions, just the price * quantity
$item->getPriceSum();

// With conditions applied get the price of a single quantity
$item->getPriceWithConditions();

// Get the sum with conditions applied
$item->getPriceSumWithConditions();

// Without conditions applied
$item->getPriceSumWithConditions();

$table->string('session_id'); // this handles the session id of the cart
$table->text('items'); // this will store the cart items
$table->text('conditions'); // this will store the cart level conditions

protected $guarded = [];

protected $casts = [
    'items' => 'array',
    'conditions' => 'array',
];

'driver' => 'database',

'storage' => [
    'session',
    'database' => [
        'model' => \App\Models\Cart::class, // your model here
        'id' => 'session_id',
        'items' => 'items',
        'conditions' => 'conditions',
    ],
],

Event::listen('LaravelCart.Added', function () {
    // cart was created
});

Event::listen('LaravelCart.Adding', function ($item) {
    // item is being added
});

Event::listen('LaravelCart.Added', function ($item) {
    // item was added
});

Event::listen('LaravelCart.Updating', function ($item) {
    // item is being updated
});

Event::listen('LaravelCart.Updated', function ($item) {
    // item was updated
});

Event::listen('LaravelCart.Removing', function ($item) {
    // item is being removed
});

Event::listen('LaravelCart.Removed', function ($item) {
    // item was removed
});

Event::listen('LaravelCart.Clearing', function () {
    // cart is being cleared
});

Event::listen('LaravelCart.Cleared', function () {
    // cart was cleared
});