binafy / laravel-cart
Laravel Cart is a customizable package for adding shopping cart functionality to Laravel applications
Installs: 1 408
Dependents: 0
Suggesters: 0
Security: 0
Stars: 158
Watchers: 1
Forks: 11
Open Issues: 0
Requires
- php: ^8.0
- laravel/framework: ^9.0|^10.0|^11.0
Requires (Dev)
- laravel/pint: ^1.5
- orchestra/testbench: ^7.0|^8.0|^9.0
- pestphp/pest-plugin-laravel: ^1.4.0|^2.0.0
README
Introduction
The Laravel Cart
is a highly customizable and flexible package that integrates basket functionality into your Laravel application. It simplifies storing and managing cart items, supporting multiple item types and quantities. It is ideal for e-commerce platforms to create carts, attach items, and manage them efficiently. Installation is straightforward via Composer, and it offers robust features like secure item storage, easy cart manipulation, and seamless integration with your existing Laravel app.
Features
The Laravel Cart
package is an ideal choice for developers looking to implement a reliable and scalable cart system in their Laravel-based e-commerce applications:
- Item Management: Easily add, update, and remove items from the cart with an intuitive API.
- Attributes and Options: Define custom attributes and options for cart items to handle variations like size and color.
- Tax Calculation: Built-in support for tax calculations, enabling automatic tax application based on predefined rules.
- Discounts and Coupons: Integrate discount codes and coupon functionalities to offer promotions and special offers to customers.
- Session and Database Storage: Flexible storage options allow carts to be stored in sessions or the database.
- Events and Listeners: Hook into various cart events with listeners to perform actions like logging or triggering additional business logic.
- Customizable: Extend and customize the core functionalities to meet specific business requirements.
- Easy Integration: Designed to integrate seamlessly with existing Laravel projects, providing a smooth development experience.
Installation
You can install the package with Composer:
composer require binafy/laravel-cart
Publish
If you want to publish a config file, you can use this command:
php artisan vendor:publish --tag="laravel-cart-config"
If you want to publish the migrations, you can use this command:
php artisan vendor:publish --tag="laravel-cart-migrations"
For convenience, you can use this command to publish config, migration, and ... files:
php artisan vendor:publish --provider="Binafy\LaravelCart\Providers\LaravelCartServiceProvider"
After publishing, run the php artisan migrate
command.
Usage
Configuration
You can config the Laravel Cart
with laravel-cart.php
config that exists in config
folder.
Laravel Cart Facade
For convenience, you can use Laravel Cart facade to store, delete, and ...:
<?php use Binafy\LaravelCart\LaravelCart; LaravelCart::driver('session')->storeItem($item, $userId|null); LaravelCart::storeItem($item $userId|null);
Driver
If you may to using Laravel Cart facade, you can change the driver for store, delete, and ...:
<?php use Binafy\LaravelCart\LaravelCart; LaravelCart::driver('database')->storeItem($item, $userId|null); LaravelCart::driver('session')->removeItem($item);
The default driver is
database
and if you would to change the driver, you need to use the Laravel Cart config file that exists onconfig\laravel-cart.php
.
Support Drivers
Laravel Cart Model
Also, you are able to use Laravel Cart models for fetch or ... with Laravel Eloquent.
Store Cart
For storing a new cart, you can use Cart
model:
use \Binafy\LaravelCart\Models\Cart; $cart = Cart::query()->firstOrCreate(['user_id' => $user->id]);
Access Itemable
If you want to access to itemable in CartItem
, you can use itemable
relation:
$cartItem = new CartItem([ 'itemable_id' => $itemable->id, 'itemable_type' => $itemable::class, 'quantity' => 1, ]); $cartItem->itemable()->first(); // Return Model Instance
Create Cart With Storing Item
For storing an item for cart, you need to implement
Cartable
interface to your model.
use Binafy\LaravelCart\Cartable; class Product extends Model implements Cartable { public function getPrice(): int { // } }
After, you can store items in multiple ways:
Cart::query()->firstOrCreateWithStoreItems( item: $product, quantity: 1, userId: $user->id );
Store multiple items
If you may to store multiple items for a cart, you can use storeItems
method:
$items = [ [ 'itemable' => $product1, 'quantity' => 2, ], [ 'itemable' => $product2, 'quantity' => 1, ], [ 'itemable' => $product3, 'quantity' => 5, ], ]; $cart = Cart::query()->firstOrCreate(['user_id' => $user->id]); $cart->storeItems($items);
Store Item For a Cart
If you want to store items for cart, first you need to create a cart and attach items to cart:
$cart = Cart::query()->firstOrCreate(['user_id' => $user->id]); $cartItem = new CartItem([ 'itemable_id' => $itemable->id, 'itemable_type' => $itemable::class, 'quantity' => 1, ]); $cart->items()->save($cartItem);
If you may to access the items of one cart, you can use items
relation that exists in Cart model.
For conveniences, you can use storeItem
method. This method take a model or array:
$cart = Cart::query()->firstOrCreate(['user_id' => $user->id]); // Model $cart->storeItem($itemable); // Array $item['itemable'] = $itemable; $item['quantity'] = 1; $cart->storeItem($item);
Delete Item From Cart
If you may to delete an item for a cart, you can use removeItem
method:
$items = [ [ 'itemable' => $product1, 'quantity' => 2, ], [ 'itemable' => $product2, 'quantity' => 1, ], [ 'itemable' => $product3, 'quantity' => 5, ], ]; $cart = Cart::query()->firstOrCreate(['user_id' => $user->id]); $cart->removeItem($product1);
Delete All Items From Cart
If you may to delete all items from a cart, you can use emptyCart
method:
$items = [ [ 'itemable' => $product1, 'quantity' => 2, ], [ 'itemable' => $product2, 'quantity' => 1, ], [ 'itemable' => $product3, 'quantity' => 5, ], ]; $cart = Cart::query()->firstOrCreate(['user_id' => $user->id]); $cart->emptyCart();
Increase Quantity
If you may to increase the quantity of item in cart, you can use increaseQuantity
method:
$cart->increaseQuantity(item: $item, quantity: 2); // By default quantity is 1
Decrease Quantity
If you may to decrease the quantity of item in cart, you can use decreaseQuantity
method:
$cart->decreaseQuantity(item: $item, quantity: 2); // By default quantity is 1
Available Events
The Laravel Cart
have some events that you can listen to these event and doing something:
Contributors
Thanks to all the people who contributed. Contributors.
Security
If you discover any security-related issues, please email binafy23@gmail.com
instead of using the issue tracker.
Changelog
The changelog can be found in the CHANGELOG.md
file of the GitHub repository. It lists the changes, bug fixes, and improvements made to each version of the Laravel User Monitoring package.
License
The MIT License (MIT). Please see License File for more information.
Donate
If this package is helpful for you, you can buy a coffee for me :) ❤️
- Iraninan Gateway: https://daramet.com/milwad_khosravi
- Paypal Gateway: SOON
- MetaMask Address:
0xf208a562c5a93DEf8450b656c3dbc1d0a53BDE58