laravel extendable basket proporciona varias clases abstractas que implementan la funcionalidad básica de la cesta de comercio electrónico. Estas clases deben ampliarse mediante su solicitud.
Simplemente instale la última versión usando Composer.
composer require divineomega/laravel-extendable-basket
Debe realizar varios pasos de configuración para poder utilizar este paquete.
Se requieren dos tablas de base de datos para almacenar datos de la cesta y de los artículos de la cesta. Por defecto, estos se denominan baskets
y basket_items
. Este paquete proporciona migraciones de bases de datos para crear estas tablas.
Para ejecutar estas migraciones, ingrese el siguiente comando artesanal.
php artisan migrate
Ahora necesita crear dos modelos relacionados, uno para contener los detalles de la cesta y otro para contener los detalles de los artículos de la cesta. A continuación se muestran dos modelos de ejemplo. Se pueden modificar o agregar según sea necesario.
Crea un modelo de cesta.
# 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 ' );
}
}
Crea un modelo 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 ' );
}
}
Todo lo que se pueda colocar en la cesta proporcionada por esta biblioteca se considera "canasto". Puede hacer que cualquier modelo de Eloquent existente sea compatible con cestas simplemente haciéndolo implementar la interfaz Basketable
.
Por ejemplo, si tenía un modelo Product
, puede cambiarlo de la siguiente manera.
# app/Product.php
<?php
namespace App ;
use Illuminate Database Eloquent Model ;
use DivineOmega LaravelExtendableBasket Interfaces Basketable ;
class Product extends Model implements Basketable {
// ...
}
Tenga en cuenta que cualquier modelo encestable debe tener un método getPrice()
y getName()
que devuelva un precio numérico y un nombre textual del encestable, respectivamente.
Esta sección describe el uso de la funcionalidad de cesta y artículos de cesta proporcionada por este paquete. Se supone que ha realizado la instalación y configuración requeridas, de la manera especificada anteriormente.
Recuerda use
la cesta y/o modelos de artículos de cesta que hayas creado, cuando sea necesario.
Desde cualquier lugar de tu aplicación, podrás obtener la cesta actual. Si actualmente no existe ninguna cesta en la sesión, se creará una.
$ basket = Basket:: getCurrent ();
Si necesita descartar la cesta actual y crear una nueva, como después de que un usuario haya realizado un pedido, puede utilizar el método getNew
.
$ basket = Basket:: getNew ();
Básicamente, este método funciona como vaciar la canasta.
Los métodos estáticos getCurrent
y getNew
almacenan el ID de la cesta actual en la sesión. Si no quieres esto, puedes gestionar las cestas tú mismo, como lo harías con cualquier modelo Eloquent.
// Get new basket
$ basket = new Basket ();
// Get current basket
$ userBasketId = Auth:: user ()-> basket_id ;
$ basket = Basket:: find ( $ userBasketId );
Después de obtener la cesta actual, puede agregarle artículos fácilmente utilizando el método de add
cesta. Debes proporcionarle una cantidad y cualquier modelo que puedas cestar.
Opcionalmente, también puede proporcionar una serie de metadatos de artículos de la cesta, que podrían usarse para almacenar información sobre variaciones de un producto.
$ quantity = 5 ;
$ product = Product:: FindOrFail ( 1 );
$ basket -> add ( $ quantity , $ product );
$ basket -> add ( $ quantity , $ product , [ ' colour ' => ' red ' , ' size ' => ' medium ' ]);
Se puede obtener fácilmente los artículos de la cesta y el modelo de cesta que contienen. Vea el ejemplo a continuación.
foreach ( $ basket -> items as $ item ) {
$ product = $ item -> basketable ;
echo $ product -> name ;
}
Cada artículo de la cesta tiene una cantidad asociada. Se establece cuando se agrega un artículo a la cesta, pero se puede modificar más tarde mediante el método setQuantity
.
$ item = $ basket -> items -> first ();
$ item -> setQuantity ( $ request -> quantity );
Los artículos de la cesta se pueden eliminar fácilmente simplemente eliminándolos. Vea el siguiente ejemplo.
$ item = $ basket -> items -> first ();
$ item -> delete ();
Obtener el costo unitario de un artículo de la cesta simplemente implica llamar al método getPrice
del modelo de la cesta asociado con el artículo de la cesta. Vea el ejemplo a continuación.
$ item = $ basket -> items -> first ();
$ item -> basketable -> getPrice ();
La clase de artículo de la cesta proporciona un método getPrice
que obtiene el total de la línea. Esto es simplemente el precio del carrito multiplicado por la cantidad de artículos del carrito. El código de ejemplo siguiente muestra cómo utilizar este método.
$ item = $ basket -> items -> first ();
$ item -> getPrice ();
Hay un método único en la clase de la cesta que puede sumar todas las cantidades de artículos de la cesta. Simplemente llame al método getTotalNumberOfItems
, de la siguiente manera.
$ numItems = $ basket -> getTotalNumberOfItems ();
Se proporciona un método getSubtotal
en la clase cesta que proporciona el total de todos los artículos de la cesta. Vea el siguiente ejemplo.
$ subtotal = $ basket -> getSubtotal ()
Si desea agregar costos de envío o descuentos, puede crear un nuevo método getTotal
en su clase de cesta. Este método puede llamar al método getSubtotal
y luego modificarlo y devolverlo, de la forma que desee.
A continuación se muestra un ejemplo de clase Basket que implementa esta idea.
# 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 ;
}
}