laravel extendable basket基本的な e コマース バスケット機能を実装するいくつかの抽象クラスを提供します。これらのクラスはアプリケーションによって拡張する必要があります。
Composer を使用して最新バージョンをインストールするだけです。
composer require divineomega/laravel-extendable-basket
このパッケージを使用するには、さまざまなセットアップ手順を実行する必要があります。
バスケットとバスケット項目のデータを保存するには、2 つのデータベース テーブルが必要です。デフォルトでは、これらはbaskets
およびbasket_items
と呼ばれます。このパッケージは、これらのテーブルを作成するためのデータベース移行を提供します。
これらの移行を実行するには、次の職人コマンドを入力します。
php artisan migrate
次に、2 つの関連モデルを作成する必要があります。1 つはバスケットの詳細を保持するモデル、もう 1 つはバスケット項目の詳細を保持するモデルです。以下に 2 つのモデル例を示します。必要に応じて変更または追加できます。
バスケットモデルを作成します。
# 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 ' );
}
}
この図書館が提供するバスケットに入れることができるものはすべて「バスケット可能」とみなされます。 Basketable
インターフェイスを実装するだけで、既存の Eloquent モデルをバスケット可能にすることができます。
たとえば、 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 ();
バスケット クラスには、すべてのバスケット項目の数量を合計できるメソッドが 1 つあります。次のように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 ;
}
}