Langkah selanjutnya, kita akan menampilkan data order dan detailnya serta memberikan opsi bagi admin untuk mengubah status order, kita akan membangun fitur manajemen order di halaman administrator. Fitur ini mencakup pembuatan CRUD untuk order dan order detail serta opsi untuk memperbarui status order. Kita sebelumnya sudah membuat tabel untuk orders dan orderitems. Kita akan menggunakan tabel tersebut.
Langkah 1: Buat Controller untuk Order Management
Buat controller OrderController untuk mengelola data order:
php artisan make:controller OrderController
Di OrderController.php, buat method untuk menampilkan list order, detail order, dan mengubah status order:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\Order;
use Illuminate\Http\Request;
class OrderController extends Controller
{
// Tampilkan daftar order
public function index()
{
$orders = Order::with('user')->get();
return view('admin.orders.index', compact('orders'));
}
// Tampilkan detail order tertentu
public function show($id)
{
$order = Order::with('items.product')->findOrFail($id);
return view('admin.orders.show', compact('order'));
}
// Update status order
public function updateStatus(Request $request, $id)
{
$order = Order::findOrFail($id);
$order->status = $request->status;
$order->save();
return redirect()->route('orders.index')->with('success', 'Order status updated successfully');
}
}
Langkah 2: Buat Views untuk Manajemen Order
Buat File index.blade.php untuk Menampilkan Daftar Order
Buat file di resources/views/admin/orders/index.blade.php:
@extends('layouts.admin')
@section('content')
<div class="container">
<h2>Order List</h2>
<table class="table">
<thead>
<tr>
<th>Order ID</th>
<th>User</th>
<th>Total Price</th>
<th>Status</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach($orders as $order)
<tr>
<td>{{ $order->id }}</td>
<td>{{ $order->user->name }}</td>
<td>{{ $order->total}}</td>
<td>{{ $order->status }}</td>
<td>
<a href="{{ route('admin.orders.show', $order->id) }}" class="btn btn-primary">View</a>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endsection
Buat File show.blade.php untuk Menampilkan Detail Order
Buat file di resources/views/admin/orders/show.blade.php:
@extends('layouts.admin')
@section('content')
<div class="container">
<h2>Order Details - Order #{{ $order->id }}</h2>
<p><strong>User:</strong> {{ $order->user->name }}</p>
<p><strong>Total Price:</strong> ${{ $order->total}}</p>
<!-- Tampilkan detail order -->
<h3>Order Items</h3>
<table class="table">
<thead>
<tr>
<th>Product</th>
<th>Quantity</th>
<th>Price</th>
</tr>
</thead>
<tbody>
@foreach($order->items as $item)
<tr>
<td>{{ $item->product->name }}</td>
<td>{{ $item->quantity }}</td>
<td>${{ $item->price }}</td>
</tr>
@endforeach
</tbody>
</table>
<!-- Form untuk update status order -->
<form action="{{ route('admin.orders.updateStatus', $order->id) }}" method="POST">
@csrf
@method('PUT')
<div class="form-group">
<label for="status">Order Status</label>
<select name="status" id="status" class="form-control">
<option value="Pending" {{ $order->status == 'Pending' ? 'selected' : '' }}>Pending</option>
<option value="Processing" {{ $order->status == 'Processing' ? 'selected' : '' }}>Processing</option>
<option value="Completed" {{ $order->status == 'Completed' ? 'selected' : '' }}>Completed</option>
<option value="Canceled" {{ $order->status == 'Canceled' ? 'selected' : '' }}>Canceled</option>
</select>
</div>
<button type="submit" class="btn btn-success">Update Status</button>
</form>
</div>
@endsection
Langkah 3: Tambahkan Routes untuk Manajemen Order
Di file routes/web.php, tambahkan route untuk order management di dalam grup admin:
use App\Http\Controllers\OrderController;
Route::prefix('admin')->middleware('auth')->group(function () {
Route::get('/orders', [OrderController::class, 'index'])->name('orders.index');
Route::get('/orders/{id}', [OrderController::class, 'show'])->name('admin.orders.show');
Route::put('/orders/{id}/status', [OrderController::class, 'updateStatus'])->name('admin.orders.updateStatus');
});
Langkah 4: Tambahkan menu order di admin
Buka file admin.blade.php di folder layouts dan tambahkan menu order berikut:
<a class="nav-link {{ request()->is('orders*') ? 'active' : '' }}" href="{{ route('orders.index') }}">
<i class="fa fa-shopping-cart"></i> Orders
</a>
Langkah 5. Edit model Order
Edit model order.php untuk menambahkan function user, agar relation antara user dan order berhasil kita panggil:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Order extends Model
{
protected $fillable = [
'user_id', 'total', 'status','payment_status'
];
// Relasi ke user
public function user()
{
return $this->belongsTo(User::class);
}
public function items()
{
return $this->hasMany(OrderItem::class);
}
}
Langkah 6: Testing
Buka halaman daftar order di /admin/orders untuk melihat semua order.