Skip to content
e-commerce shopping cart for laravel application.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
migrations 1. add user_id and guard to databasestorage table. Jan 28, 2018
src Improve the way to get guard and user Mar 27, 2018
tests 1. set guard to alias. Mar 27, 2018
.gitignore add .gitignore file. Jan 21, 2018
.php_cs 1. add test case. Jan 17, 2018
.travis.yml update travis Jan 19, 2018
LICENSE 1. add test case. Jan 17, 2018 update Jan 28, 2018
phpunit.php 1. add user_id and guard to databasestorage table. Jan 28, 2018
phpunit.xml 1. add user_id and guard to databasestorage table. Jan 28, 2018

Build Status Scrutinizer Code Quality Code Coverage Build Status Latest Stable Version Latest Unstable Version License

本包是基于 overtrue/laravel-shopping-cart 进行扩展开发,主要实现了以下扩展:

  1. 购物车数据支持 Database 存储
  2. Item 增加 Model 属性返回。因为购物车可能是SPU或者SKU,因此直接通过 model 属性直接返回相关对象。
  3. 支持多 Guard. 因为在 iBrand 产品有商城购物车和导购购物车。

已经完成了 Session 和 Database 模式下的单元测试,而且正在 iBrand 产品线上使用中. 可放心使用.


composer require ibrand/laravel-shopping-cart:~1.0 -vvv
php artisan vendor:publish --provider="iBrand\Shoppingcart\ServiceProvider"

低于 Laravel5.5 版本

config/app.php 文件中 'providers' 添加


config/app.php 文件中 'aliases' 添加

'Cart'=> iBrand\Shoppingcart\Facade::class


Select Storage

You can change data Storage in config/ibrand/cart.php file.

'storage' => \iBrand\Shoppingcart\Storage\DatabaseStorage::class,
'storage' => \iBrand\Shoppingcart\Storage\SessionStorage::class,

If you use Database Storage, you need to execute php artisan migrate

Add item to cart

Add a new item.

Item | null Cart::add(
                    string | int $id,
                    string $name,
                    int $quantity,
                    int | float $price
                    [, array $attributes = []]


$row = Cart::add(37, 'Item name', 5, 100.00, ['color' => 'red', 'size' => 'M']);
// Item:
//    id       => 37
//    name     => 'Item name'
//    qty      => 5
//    price    => 100.00
//    color    => 'red'
//    size     => 'M'
//    total    => 500.00
//    __raw_id => '8a48aa7c8e5202841ddaf767bb4d10da'
$rawId = $row->rawId();// get __raw_id
$row->qty; // 5

Update item

Update the specified item.

Item Cart::update(string $rawId, int $quantity);
Item Cart::update(string $rawId, array $arrtibutes);


Cart::update('8a48aa7c8e5202841ddaf767bb4d10da', ['name' => 'New item name');
// or only update quantity
Cart::update('8a48aa7c8e5202841ddaf767bb4d10da', 5);

Get all items

Get all the items.

Collection Cart::all();


$items = Cart::all();

Get item

Get the specified item.

Item Cart::get(string $rawId);


$item = Cart::get('8a48aa7c8e5202841ddaf767bb4d10da');

Remove item

Remove the specified item by raw ID.

boolean Cart::remove(string $rawId);



Destroy cart

Clean Shopping Cart.

boolean Cart::destroy();
boolean Cart::clean(); // alias of destroy();


Cart::destroy();// or Cart::clean();

Total price

Returns the total of all items.

int | float Cart::total(); // alias of totalPrice();
int | float Cart::totalPrice();


$total = Cart::total();
// or
$total = Cart::totalPrice();

Count rows

Return the number of rows.

int Cart::countRows();


Cart::add(37, 'Item name', 5, 100.00, ['color' => 'red', 'size' => 'M']);
Cart::add(37, 'Item name', 1, 100.00, ['color' => 'red', 'size' => 'M']);
Cart::add(37, 'Item name', 5, 100.00, ['color' => 'red', 'size' => 'M']);
Cart::add(127, 'foobar', 15, 100.00, ['color' => 'green', 'size' => 'S']);
$rows = Cart::countRows(); // 2

Count quantity

Returns the quantity of all items

int Cart::count($totalItems = true);

$totalItems : When false,will return the number of rows.


Cart::add(37, 'Item name', 5, 100.00, ['color' => 'red', 'size' => 'M']);
Cart::add(37, 'Item name', 1, 100.00, ['color' => 'red', 'size' => 'M']);
Cart::add(37, 'Item name', 5, 100.00, ['color' => 'red', 'size' => 'M']);
$count = Cart::count(); // 11 (5+1+5)

Search items

Search items by property.

Collection Cart::search(array $conditions);


$items = Cart::search(['color' => 'red']);
$items = Cart::search(['name' => 'Item name']);
$items = Cart::search(['qty' => 10]);

Check empty

bool Cart::isEmpty();

Specifies the associated model

Specifies the associated model of item.

Cart Cart::associate(string $modelName);


$item = Cart::get('8a48aa7c8e5202841ddaf767bb4d10da');
$item->product->name; // $item->product is instanceof 'App\Models\Product'

The Collection And Item

Collection and Overtrue\LaravelShoppingCart\Item are instanceof Illuminate\Support\Collection, Usage Refer to:Collections - Laravel doc.

properties of Overtrue\LaravelShoppingCart\Item:

  • id - your goods item ID.
  • name - Name of item.
  • qty - Quantity of item.
  • price - Unit price of item.
  • total - Total price of item.
  • __raw_id - Unique ID of row.
  • __model - Name of item associated Model.
  • ... custom attributes.

And methods:

  • rawId() - Return the raw ID of item.


Event Name Parameters
cart.adding ($attributes, $cart);
cart.added ($attributes, $cart);
cart.updating ($row, $cart);
cart.updated ($row, $cart);
cart.removing ($row, $cart);
cart.removed ($row, $cart);
cart.destroying ($cart);
cart.destroyed ($cart);

You can easily handle these events, for example:

Event::on('cart.adding', function($attributes, $cart){
    // code
You can’t perform that action at this time.