プログラミング

Laravel ショッピングカートの実装

Laravel 5での「完全な」ショッピングカートシステムの構築について、この記事ではそのステップを詳しく解説します。この記事は、初心者でも理解できるように、Laravelの基本的な知識を前提にしています。ショッピングカート機能は、オンラインストアで必須の機能であり、ユーザーが商品を選んで購入手続きを行う際の中核を成します。

1. 必要な準備

まず最初に、Laravelの環境が整っていることを確認してください。まだインストールしていない場合は、公式サイトからインストールガイドを確認し、セットアップを完了してください。

lua
composer create-project --prefer-dist laravel/laravel shopping-cart

これで新しいLaravelのプロジェクトが作成されます。次に、必要な依存関係をインストールします。今回は、データベースを使用してカートを保存するため、laravel/ui パッケージを使って認証機能も追加しておくと便利です。

lua
composer require laravel/ui php artisan ui bootstrap --auth npm install && npm run dev

これで、ユーザー認証機能を持つ基本的なアプリケーションが準備できました。

2. モデルとマイグレーションの作成

ショッピングカートには、商品情報やユーザーのカート内アイテムを管理するためのデータベースが必要です。まず、カートアイテムを保持するテーブルを作成します。

php
php artisan make:model CartItem -m

これにより、CartItem モデルとマイグレーションが作成されます。マイグレーションファイルを以下のように編集します。

php
// database/migrations/xxxx_xx_xx_xxxxxx_create_cart_items_table.php public function up() { Schema::create('cart_items', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->onDelete('cascade'); $table->foreignId('product_id')->constrained()->onDelete('cascade'); $table->integer('quantity')->default(1); $table->timestamps(); }); }

ここでは、ユーザーごとに商品のカート内アイテムを管理できるように、user_idproduct_id の外部キーを定義しています。その後、マイグレーションを実行してテーブルを作成します。

bash
php artisan migrate

3. カートシステムのロジック

次に、カートに商品を追加するロジックを実装します。カートの管理は、通常セッションを利用して行いますが、データベースに保存することもできます。今回は、カートアイテムをデータベースに保存する方法を採用します。

カートアイテムを追加する

CartController を作成し、カートにアイテムを追加するメソッドを実装します。

php
php artisan make:controller CartController

CartController 内で、アイテムをカートに追加する処理を記述します。

php
// app/Http/Controllers/CartController.php use App\Models\CartItem; use App\Models\Product; use Illuminate\Http\Request; class CartController extends Controller { public function addToCart(Request $request, $productId) { $product = Product::findOrFail($productId); $user = auth()->user(); // カートにアイテムが既にあるか確認 $cartItem = CartItem::where('user_id', $user->id) ->where('product_id', $product->id) ->first(); if ($cartItem) { // すでにカートに商品がある場合は数量を増やす $cartItem->quantity += $request->quantity; $cartItem->save(); } else { // 新しいカートアイテムを追加 CartItem::create([ 'user_id' => $user->id, 'product_id' => $product->id, 'quantity' => $request->quantity, ]); } return redirect()->route('cart.index'); } }

ここでは、product_iduser_id を使って、ユーザーがすでにカートに追加した商品を確認し、もし存在すればその商品の数量を更新し、存在しなければ新たにカートに商品を追加する処理を行っています。

カート内アイテムを表示する

次に、ユーザーがカート内に追加した商品を表示するビューを作成します。cart.index ルートを作成し、カートの内容を表示するビューを実装します。

php
// resources/views/cart/index.blade.php @foreach ($cartItems as $item)

{{ $item->product->name }} - {{ $item->quantity }}個

価格: ¥{{ $item->product->price * $item->quantity }}

@
endforeach

カートの内容をコントローラーから渡すために、CartController に以下のようなメソッドを追加します。

php
// app/Http/Controllers/CartController.php public function index() { $cartItems = CartItem::where('user_id', auth()->id())->get(); return view('cart.index', compact('cartItems')); }

これで、ユーザーがカートに追加した商品を一覧表示するページが完成しました。

4. 購入手続き(チェックアウト)

チェックアウトは、カートに追加されたアイテムを基に最終的な購入処理を行う部分です。ユーザーが購入手続きを完了した際、注文情報をデータベースに保存し、カートアイテムをクリアする必要があります。

まず、Order モデルとマイグレーションを作成します。

php
php artisan make:model Order -m

orders テーブルのマイグレーションを以下のように作成します。

php
// database/migrations/xxxx_xx_xx_xxxxxx_create_orders_table.php public function up() { Schema::create('orders', function (Blueprint $table) { $table->id(); $table->foreignId('user_id')->constrained()->onDelete('cascade'); $table->decimal('total_price', 8, 2); $table->timestamps(); }); }

注文を作成する処理を CartController に追加します。

php
// app/Http/Controllers/CartController.php use App\Models\Order; public function checkout() { $user = auth()->user(); $cartItems = CartItem::where('user_id', $user->id)->get(); // 合計金額を計算 $totalPrice = $cartItems->sum(function ($item) { return $item->product->price * $item->quantity; }); // 注文を保存 $order = Order::create([ 'user_id' => $user->id, 'total_price' => $totalPrice, ]); // カートアイテムを削除 CartItem::where('user_id', $user->id)->delete(); return redirect()->route('order.success', ['order' => $order]); }

これで、ユーザーがカート内のアイテムを基にチェックアウト処理を完了できるようになります。

5. 結論

Laravelでショッピングカートを実装するための基本的なステップは以上です。ここでは、カートアイテムの追加、表示、購入処理までを一通り解説しました。もちろん、実際のオンラインショップでは、支払い処理や発送処理、さらにセキュリティや性能面の最適化など、さまざまな要素が必要になりますが、基本的なカート機能の実装はこのように進めることができます。

Back to top button