Step 1: Install Laravel
If you haven’t already, create a new Laravel 11 project:
composer create-project laravel/laravel customer-crud
Step 2: Create the Customer Model and Migration
Generate a model with a migration:
php artisan make:model Customer -m
This command creates:
- A model file at
app/Models/Customer.php
- A migration file in the
database/migrations
folder
Step 3: Define Fields in the Migration
Open the generated migration file in database/migrations
and define the fields:
public function up()
{
Schema::create('customers', function (Blueprint $table) {
$table->id();
$table->string('fname');
$table->string('lname');
$table->string('name')->nullable();
$table->string('email')->unique();
$table->timestamps();
});
}
Run the migration to create the customers
table:
php artisan migrate
Step 4: Set Up the Model
In the Customer
model file app/Models/Customer.php
, define the fillable fields:
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Customer extends Model
{
use HasFactory;
protected $fillable = [
'fname',
'lname',
'name',
'email',
];
}
Step 5: Create a Controller
Generate a controller to handle the CRUD operations:
php artisan make:controller CustomerController --resource
This command creates a CustomerController
with resource methods. Open app/Http/Controllers/CustomerController.php
and implement CRUD functionality:
namespace App\Http\Controllers;
use App\Models\Customer;
use Illuminate\Http\Request;
class CustomerController extends Controller
{
public function index()
{
$customers = Customer::all();
return view('customers.index', compact('customers'));
}
public function create()
{
return view('customers.create');
}
public function store(Request $request)
{
$request->validate([
'fname' => 'required|string|max:255',
'lname' => 'required|string|max:255',
'email' => 'required|email|unique:customers,email',
]);
Customer::create($request->all());
return redirect()->route('customers.index')->with('success', 'Customer created successfully.');
}
public function show(Customer $customer)
{
return view('customers.show', compact('customer'));
}
public function edit(Customer $customer)
{
return view('customers.edit', compact('customer'));
}
public function update(Request $request, Customer $customer)
{
$request->validate([
'fname' => 'required|string|max:255',
'lname' => 'required|string|max:255',
'email' => 'required|email|unique:customers,email,' . $customer->id,
]);
$customer->update($request->all());
return redirect()->route('customers.index')->with('success', 'Customer updated successfully.');
}
public function destroy(Customer $customer)
{
$customer->delete();
return redirect()->route('customers.index')->with('success', 'Customer deleted successfully.');
}
}
Step 6: Set Up Routes
Open routes/web.php
and define resource routes for the customer:
use App\Http\Controllers\CustomerController;
Route::resource('customers', CustomerController::class);
Step 7: Create Blade Views
1. resources/views/customers/index.blade.php
@extends('layouts.app')
@section('content')
<h1>Customers</h1>
<a href="{{ route('customers.create') }}">Add New Customer</a>
<table>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Actions</th>
</tr>
@foreach ($customers as $customer)
<tr>
<td>{{ $customer->fname }}</td>
<td>{{ $customer->lname }}</td>
<td>{{ $customer->email }}</td>
<td>
<a href="{{ route('customers.show', $customer) }}">Show</a>
<a href="{{ route('customers.edit', $customer) }}">Edit</a>
<form action="{{ route('customers.destroy', $customer) }}" method="POST" style="display:inline;">
@csrf
@method('DELETE')
<button type="submit">Delete</button>
</form>
</td>
</tr>
@endforeach
</table>
@endsection
2. resources/views/customers/create.blade.php
@extends('layouts.app')
@section('content')
<h1>Add Customer</h1>
<form action="{{ route('customers.store') }}" method="POST">
@csrf
<label>First Name:</label>
<input type="text" name="fname" required>
<label>Last Name:</label>
<input type="text" name="lname" required>
<label>Email:</label>
<input type="email" name="email" required>
<button type="submit">Save</button>
</form>
@endsection
3. resources/views/customers/edit.blade.php
@extends('layouts.app')
@section('content')
<h1>Edit Customer</h1>
<form action="{{ route('customers.update', $customer) }}" method="POST">
@csrf
@method('PUT')
<label>First Name:</label>
<input type="text" name="fname" value="{{ $customer->fname }}" required>
<label>Last Name:</label>
<input type="text" name="lname" value="{{ $customer->lname }}" required>
<label>Email:</label>
<input type="email" name="email" value="{{ $customer->email }}" required>
<button type="submit">Update</button>
</form>
@endsection
Step 8: Set Up Layouts
Add a layouts/app.blade.php
file to structure the page, with a @yield('content')
placeholder for content.
<!DOCTYPE html>
<html>
<head>
<title>Customer CRUD</title>
</head>
<body>
<div class="container">
@yield('content')
</div>
</body>
</html>
Step 9: Run the Application
Run the development server:
php artisan serve
Visit http://127.0.0.1:8000/customers
to manage customers with CRUD operations. This simple Laravel 11 CRUD app provides all the essential features for managing customer data!