laravel extendable basket предоставляет несколько абстрактных классов, которые реализуют базовые функции корзины электронной коммерции. Эти классы должны быть расширены вашим приложением.
Просто установите последнюю версию с помощью композитора.
composer require divineomega/laravel-extendable-basket
Чтобы использовать этот пакет, вам необходимо выполнить различные шаги по настройке.
Для хранения данных о корзине и элементах корзины необходимы две таблицы базы данных. По умолчанию они называются baskets
и basket_items
. Этот пакет обеспечивает миграцию базы данных для создания этих таблиц.
Чтобы запустить эти миграции, введите следующую ремесленную команду.
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
сохраняют текущий идентификатор корзины в сеансе. Если вы этого не хотите, вы можете управлять корзинами самостоятельно, как и в любой модели 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 ;
}
}