一个简单的Laravel购物车。

dev-main 2021-11-12 16:54 UTC

This package is auto-updated.

Last update: 2024-09-12 23:22:55 UTC


README

Build Status

我们需要PHP 8。

安装包。

composer require jimmitjoo/cart

发布配置和迁移。

php artisan vendor:publish --tag=laravel-cart

您可以配置自己的Cart和CartItem模型。

为此,您需要实现这两个模型的接口。

默认情况下,我们期望Cart和CartItem模型使用UUID作为标识符。

class Cart extends Model implements CartContract 
{
    use UsesUuids;
}
class CartItem extends Model implements CartItemContract 
{
    use UsesUuids;
}

创建新的购物车

例如,您可以创建一个新的购物车,用于某些原因尚未拥有购物车的用户。

要使用新的购物车,您应该将购物车的ID(UUID字符串)存储在某个地方。 $cart->id

$cart = (new CreateCartAction)->execute();

带有属性的创建新的购物车

例如,您可以创建一个属于系统特定用户的购物车。

$cartData = new CartData((int) $userId);

$cart = (new CreateCartAction)->execute($cartData);

您还可以向购物车添加备注。例如,备注可以告诉您购物车是从哪里创建的或其他重要信息。Typehints仅用于澄清CartData对象期望的类型。

$cartData = new CartData((int) $userId, (string) $note);

$cart = (new CreateCartAction)->execute($cartData);

向购物车添加产品

因此,有几种方法可以实现。

Purchasable 是一个您可以将它添加到任何模型中的特质,以允许用户购买。

$cart->addToCart(Purchasable $purchasable, int $amount = 1, int $discount = 0);

您可以连续添加多个产品。

$cart
->addToCart(Purchasable $purchasable)
->addToCart(Purchasable $purchasable);

或者,您可以通过自己创建CartItem并附加购物车ID来特别创建一个CartItem。

$cartItemData = new CartItemData(
    1, // Amount of products.
    300, // Current price (minus discount) of the product.
    100, // The discount,
    'Personalized product', // Custom product name
    null, // You could add a purchasable id here
    null, // And the purchasable type here
    $this->cart->id, // Add this item to a cart
);

$cartItem = (new AddCartItemToCartAction)->execute($cartItemData);

更新购物车项

$cartItem = CartItem::find($existingItemId);

$cartItemData = new CartItemData(
    1, // Amount of products.
    88, // Current price (minus discount) of the product.
    12, // The discount,
    'Updated product name', // Custom product name
    null, // You could add a purchasable id here
    null, // And the purchasable type here
    null, // We don't need to specify the cart on update...
    $cartItem->id, // ID of the item to update
);

$cartItem = (new UpdateCartItemAction)->execute($cartItemData);

移除购物车项

$cartItemToRemove = CartItem::find($existingItemId);

(new RemoveCartItemAction)->execute($cartItemToRemove);