📜  购物车 laravel - PHP (1)

📅  最后修改于: 2023-12-03 15:41:49.596000             🧑  作者: Mango

购物车 Laravel - PHP

简介

购物车是一个在线商城系统中非常必要的一个功能,使用购物车可以让用户方便的将商品添加到购物车中,然后在结账的时候一次性付款。Laravel是一个非常流行的PHP框架,可以轻松构建一个购物车功能。

实现
数据库

购物车需要一个数据库来存储用户的购物车信息,我们可以创建一个名为carts的数据表来存储这些信息。该数据表可以包含以下字段:

  • id - 购物车ID
  • user_id - 用户ID
  • product_id - 商品ID
  • quantity - 商品数量

创建数据表的迁移文件代码如下:

php artisan make:migration create_carts_table --create=carts
public function up()
{
    Schema::create('carts', function (Blueprint $table) {
        $table->id();
        $table->foreignId('user_id')->constrained();
        $table->foreignId('product_id')->constrained();
        $table->integer('quantity');
        $table->timestamps();
    });
}
模型

我们需要一个Cart模型来操作购物车数据表,我们可以通过Laravel的artisan命令行工具生成一个Cart模型。

php artisan make:model Cart

Cart模型应该定义一个跟products表的关联关系,可以使用BelongsToMany方法来创建一个多对多关联。

class Cart extends Model
{
    public function products()
    {
        return $this->belongsToMany(Product::class)->withPivot('quantity');
    }
}
控制器

购物车控制器主要负责处理将商品添加到购物车、从购物车中移除商品、更新购物车中商品数量等功能。

添加商品到购物车的代码如下:

public function addToCart(Request $request)
{
    $productId = $request->input('product_id');
    $quantity = (int) $request->input('quantity');

    $product = Product::find($productId);

    if (!$product) {
        abort(404, 'Product not found');
    }

    $cartItem = Cart::where([
        'user_id' => Auth::id(),
        'product_id' => $productId,
    ])->first();

    if ($cartItem) {
        $cartItem->quantity += $quantity;
        $cartItem->save();
    } else {
        $cartItem = new Cart([
            'user_id' => Auth::id(),
            'product_id' => $productId,
            'quantity' => $quantity,
        ]);
        $cartItem->save();
    }

    return redirect('/cart')->with('success', 'Product added to cart');
}

从购物车中移除商品的代码如下:

public function removeFromCart(Request $request)
{
    $cartItemId = $request->input('cart_item_id');

    $cartItem = Cart::find($cartItemId);

    if (!$cartItem) {
        abort(404, 'Cart item not found');
    }

    $cartItem->delete();

    return redirect('/cart')->with('success', 'Product removed from cart');
}

更新购物车中商品数量的代码如下:

public function updateCart(Request $request)
{
    $cartItemId = $request->input('cart_item_id');
    $quantity = (int) $request->input('quantity', 1);

    $cartItem = Cart::find($cartItemId);

    if (!$cartItem) {
        abort(404, 'Cart item not found');
    }

    $cartItem->quantity = $quantity;
    $cartItem->save();

    return redirect('/cart')->with('success', 'Cart updated');
}
路由

我们需要定义一些用来处理购物车功能的路由,以下是一个简单的路由定义代码。

Route::post('/add-to-cart', [CartController::class, 'addToCart'])->middleware(['auth']);
Route::post('/remove-from-cart', [CartController::class, 'removeFromCart'])->middleware(['auth']);
Route::post('/update-cart', [CartController::class, 'updateCart'])->middleware(['auth']);
视图

最后我们需要创建一个视图来展示购物车中的内容以及允许用户修改购物车中的商品数量。

以下是一个简单的视图代码。

<h1>Shopping Cart</h1>

@if (count($cartItems) > 0)
    <table>
        <thead>
            <tr>
                <th>Product Name</th>
                <th>Price</th>
                <th>Quantity</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($cartItems as $cartItem)
                <tr>
                    <td>{{ $cartItem->product->name }}</td>
                    <td>{{ $cartItem->product->price }}</td>
                    <td>
                        <form method="post" action="/update-cart">
                            @csrf
                            <input type="hidden" name="cart_item_id" value="{{ $cartItem->id }}">
                            <input type="number" name="quantity" value="{{ $cartItem->quantity }}">
                            <button type="submit">Update</button>
                        </form>
                    </td>
                    <td>
                        <form method="post" action="/remove-from-cart">
                            @csrf
                            <input type="hidden" name="cart_item_id" value="{{ $cartItem->id }}">
                            <button type="submit">Remove</button>
                        </form>
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>
    <p>Total: {{ $total }}</p>
    <a href="/checkout">Checkout</a>
@else
    <p>No items in cart</p>
@endif
总结

购物车是一个非常有用的功能,可以为在线商店增加便利性和用户友好性。使用Laravel,我们可以轻松实现购物车功能,并且可以添加更多的功能来提高系统的性能和用户满意度。