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 ;
}
}