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!
Discover more from ABWEBDEV
Subscribe to get the latest posts sent to your email.