laravel extendable basket提供了几个实现基本电子商务购物篮功能的抽象类。这些类必须由您的应用程序扩展。
只需使用 Composer 安装最新版本即可。
composer require divineomega/laravel-extendable-basket
您需要执行各种设置步骤才能使用此软件包。
需要两个数据库表来存储购物篮和购物篮商品数据。默认情况下,这些称为baskets
和basket_items
。该包提供数据库迁移来创建这些表。
要运行这些迁移,请输入以下 artisan 命令。
php artisan migrate
现在您需要创建两个相关模型,一个用于保存购物篮详细信息,另一个用于保存购物篮商品详细信息。下面显示了两个示例模型。可以根据需要修改或添加它们。
创建篮子模型。
# app/Basket.php
<?php
namespace App ;
use DivineOmega LaravelExtendableBasket Models Basket as BasketModel ;
class Basket extends BasketModel
{
public function items (): HasMany
{
return $ this -> hasMany ( ' AppBasketItem ' );
}
}
创建 BasketItem 模型。
# app/BasketItem.php
<?php
namespace App ;
use DivineOmega LaravelExtendableBasket Models BasketItem as BasketItemModel ;
class BasketItem extends BasketItemModel
{
public function basket (): BelongsTo
{
return $ this -> belongsTo ( ' AppBasket ' );
}
}
任何可以放入该库提供的篮子中的东西都被视为“可篮子”。您只需将任何现有的 Eloquent 模型实现Basketable
接口即可使其可篮化。
例如,如果您有一个Product
模型,您可以按如下方式更改它。
# app/Product.php
<?php
namespace App ;
use Illuminate Database Eloquent Model ;
use DivineOmega LaravelExtendableBasket Interfaces Basketable ;
class Product extends Model implements Basketable {
// ...
}
请注意,任何篮子模型必须具有getPrice()
和getName()
方法,分别返回篮子的数字价格和文本名称。
本节介绍此包提供的购物篮和购物篮项目功能的使用。它假定您已按照上面指定的方式执行了所需的安装和设置。
请记住在必要时use
您创建的购物篮和/或购物篮商品模型。
从应用程序中的任何位置,您都可以获取当前的购物篮。如果会话中当前不存在购物篮,则会创建一个。
$ basket = Basket:: getCurrent ();
如果您需要丢弃当前的购物篮并创建一个新的购物篮(例如用户下订单后),您可以使用getNew
方法。
$ basket = Basket:: getNew ();
这种方法本质上兼作清空篮子的作用。
静态方法getCurrent
和getNew
将当前购物篮 ID 存储在会话中。如果您不想这样做,您可以自己管理购物篮,就像使用任何 Eloquent 模型一样。
// Get new basket
$ basket = new Basket ();
// Get current basket
$ userBasketId = Auth:: user ()-> basket_id ;
$ basket = Basket:: find ( $ userBasketId );
获取当前购物篮后,您可以使用购物篮的add
方法轻松向其中添加商品。您需要提供数量和任何可上篮的型号。
您还可以选择提供购物篮商品元数据数组,该数组可用于存储有关产品变体的信息。
$ quantity = 5 ;
$ product = Product:: FindOrFail ( 1 );
$ basket -> add ( $ quantity , $ product );
$ basket -> add ( $ quantity , $ product , [ ' colour ' => ' red ' , ' size ' => ' medium ' ]);
从篮子和它们所包含的可篮模型中取出物品可以很容易地完成。请参阅下面的示例。
foreach ( $ basket -> items as $ item ) {
$ product = $ item -> basketable ;
echo $ product -> name ;
}
每个购物篮项目都有一个与其关联的数量。它是在将商品添加到购物篮时设置的,但稍后可以通过setQuantity
方法进行修改。
$ item = $ basket -> items -> first ();
$ item -> setQuantity ( $ request -> quantity );
只需删除篮子项目即可轻松删除它们。请参阅以下示例。
$ item = $ basket -> items -> first ();
$ item -> delete ();
获取购物篮商品的单位成本只需调用与购物篮商品关联的可购物模型的getPrice
方法。请参阅下面的示例。
$ item = $ basket -> items -> first ();
$ item -> basketable -> getPrice ();
购物篮项目类提供了getPrice
方法来获取行总计。这只是篮子的价格乘以篮子项目的数量。下面的示例代码展示了如何使用此方法。
$ item = $ basket -> items -> first ();
$ item -> getPrice ();
购物篮类中有一个方法可以对所有购物篮商品数量进行求和。只需调用getTotalNumberOfItems
方法即可,如下所示。
$ numItems = $ basket -> getTotalNumberOfItems ();
购物篮类中提供了getSubtotal
方法,用于提供购物篮中所有商品的总计。请参阅以下示例。
$ subtotal = $ basket -> getSubtotal ()
如果您希望添加送货费用或折扣,您可以在购物篮类中创建一个新的getTotal
方法。该方法可以调用getSubtotal
方法,然后以任何您希望的方式修改并返回它。
下面显示了实现此想法的示例 Basket 类。
# app/Basket.php
<?php
namespace App ;
use DivineOmega LaravelExtendableBasket Models Basket as BasketModel ;
class Basket extends BasketModel
{
public function items ()
{
return $ this -> hasMany ( ' AppBasketItem ' );
}
public function getTotal ()
{
$ deliveryCost = 3.99 ;
return $ this -> getSubtotal () + $ deliveryCost ;
}
}