Laravel 12 E-Commerce Project Tutorial
User: Displaying Order History and Details
Hi everyone, welcome back to the Laravel E-Commerce Project Tutorial. In this video, we will implement the functionality for the user to view their Order History and the details of a specific order from their account dashboard.
-
Create the `account_orders` Function in `UserController`
Open your `UserController` and create the `account_orders` function. This function retrieves only the orders belonging to the currently authenticated user (`Auth::user()->id`), orders them by the most recent date, and paginates the results.
public function account_orders()
{
// Retrieve orders for the logged-in user only
$orders = Order::where("user_id",Auth::user()->id)
->orderBy("created_at","DESC")
->paginate(10);
return view("user.orders",compact("orders"));
} -
Define the Route for User Orders
Define the route for the user'sorder history page in `web.php` (or your user route file):
Route::get("/user/orders",[UserController::class,"account_orders"])->name("user.orders"); -
Create the Orders View (`orders.blade.php`)
Create a new view file named `orders.blade.php` in the `resources/views/user` directory. This view will list the user'sorders.
<x-app-layout>
<!-- Include the main content structure for the user'sdashboard area -->
<!-- ... HTML structure for orders list ... -->
<table class="table table-striped table-bordered">
<!-- Table Header (Thead) goes here -->
<tbody>
@foreach ($orders as $order)
<tr>
<td>{{ $order->id }}</td>
<td>{{ $order->total }}</td>
<td>{{ $order->created_at }}</td>
<td>
@if($order->status == "delivered")
<span class="badge bg-success">Delivered</span>
@elseif($order->status == "canceled")
<span class="badge bg-danger">Canceled</span>
@else
<span class="badge bg-warning">Ordered</span>
@endif
</td>
<td>
<a href="{{ route("user.order.details", ["order_id" => $order->id]) }}" class="btn btn-sm btn-info">View Details</a>
</td>
</tr>
@endforeach
</tbody>
</table>
{{$orders->links("pagination::bootstrap-5")}}
</x-app-layout> -
Create the `order_details` Function in `UserController`
Add a function to display the detailed view of a single order. This is similar to the Admin'sview, but with an added security check to ensure the order belongs to the user.
public function order_details($order_id)
{
$order = Order::where("user_id",Auth::user()->id)->where("id",$order_id)->firstOrFail();
$orderitems = OrderItem::where("order_id",$order_id)->orderBy("id")->paginate(12);
$transaction = Transaction::where("order_id",$order_id)->first();
return view("user.order-details",compact("order","orderitems","transaction"));
} -
Define the Route for User Order Details
Route::get("/user/order/details/{order_id}",[UserController::class,"order_details"])->name("user.order.details"); -
Create the Order Details View (`order-details.blade.php`)
Create `order-details.blade.php` in `resources/views/user`. This view will display the Order Items, Shipping Address, and Transaction Details (similar to the admin'sorder details view).
Note: The content structure is not fully provided in the text, but it is expected to mirror the data display logic used in `Part 41` (Admin Show Order Details), ensuring the use of the `$order`, `$orderitems`, and `$transaction` variables.
Verification and Next Steps 👤
Log into a user account and navigate to the My Orders page. You should see a list of all orders placed by this user, with a link to view the full details of each order.
