Laravel adalah salah satu framework PHP yang paling populer dan banyak digunakan oleh pengembang web karena kemudahan dan kelengkapan fitur-fiturnya. Salah satu fitur yang paling sering digunakan adalah CRUD (Create, Read, Update, Delete). Dalam artikel ini, kita akan membahas bagaimana cara membuat modul CRUD Laravel 11 dengan penjelasan langkah demi langkah. Artikel ini dirancang untuk membantu Anda memahami dan menerapkan CRUD Laravel dalam aplikasi Anda.
Table of Contents
ToggleApa itu CRUD Laravel?
CRUD adalah akronim untuk Create, Read, Update, dan Delete. Operasi CRUD adalah inti dari hampir setiap aplikasi web, digunakan untuk mengelola data dalam basis data.
- Create: Menambahkan data baru ke dalam basis data.
- Read: Mengambil data dari basis data untuk ditampilkan.
- Update: Mengedit data yang sudah ada dalam basis data.
- Delete: Menghapus data dari basis data.
Di Laravel, operasi CRUD dapat dengan mudah dibuat menggunakan fitur seperti Eloquent ORM, routing, dan Blade template.
Sebelum mempelajari materi CRUD laravel 11 ada baiknya anda membaca artikel artikel pengenalan terlebih dahulu agar menambah pengetahuan anda mengenai laravel
- Belajar Larave; Memahami Struktur Folder Laravel 11
- Belajar Laravel – Cara Install Laravel 11 di Windows, macOS, dan Linux
- Memahami Konfigurasi Laravel dan Cara Mengamankan File .env Laravel 11
- Belajar Laravel; Memahami Route Laravel 11
- Membuat Controller di Laravel 11
- Belajar Eloquent Laravel: Panduan Lengkap ORM Laravel
Langkah-langkah Membuat CRUD Laravel 11
1. Persiapan Proyek Laravel
- Buat proyek Laravel baru jika Anda belum memilikinya
composer create-project laravel/laravel crud-example cd crud-example php artisan serve
- Pastikan proyek berjalan di
http://localhost:8000
.
2. Buat Database dan Konfigurasi
- Buat database baru, misalnya
crud_example
. - Konfigurasikan file
.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=crud_example
DB_USERNAME=root
DB_PASSWORD=
3. Buat Migration untuk Tabel
Jalankan perintah berikut untuk membuat migration:
php artisan make:migration create_posts_table
Edit file migration di database/migrations
:
public function up(){
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
Jalankan migration:
php artisan migrate
4. Buat Model dan Seeder
Buat model Post
:
php artisan make:model Post
Tambahkan seeder untuk mengisi data dummy:
php artisan make:seeder PostSeeder
Edit PostSeeder
:
use App\Models\Post;
use Illuminate\Database\Seeder;
class PostSeeder extends Seeder
{
public function run()
{
Post::factory()->count(10)->create();
}
}
Jalankan seeder:
php artisan db:seed --class=PostSeeder
5. Buat Controller CRUD
Buat controller untuk menangani operasi CRUD:
php artisan make:controller PostController --resource
Isi PostController
:
use App\Models\Post;use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
$posts = Post::all();
return view('posts.index', compact('posts'));
}
public function create()
{
return view('posts.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required',
]);
Post::create($validated);
return redirect()->route('posts.index')->with('success', 'Post created successfully.');
}
public function edit(Post $post)
{
return view('posts.edit', compact('post'));
}
public function update(Request $request, Post $post)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required',
]);
$post->update($validated);
return redirect()->route('posts.index')->with('success', 'Post updated successfully.');
}
public function destroy(Post $post)
{
$post->delete();
return redirect()->route('posts.index')->with('success', 'Post deleted successfully.');
}
}
Penjelasan Fungsi dalam PostController
1. index()
Fungsi ini digunakan untuk menampilkan semua data dalam tabel posts
.
public function index()
{
$posts = Post::all(); // Mengambil semua data dari tabel 'posts'
return view('posts.index', compact('posts')); // Mengirim data ke view 'posts.index'
}
Post::all()
: Mengambil semua record dari modelPost
(tabelposts
).compact('posts')
: Membuat array dengan kunci'posts'
dan nilai data$posts
.view('posts.index', ...)
: Mengembalikan view bernamaindex
dalam folderposts
dengan data yang dikirim.
Tujuan: Untuk menampilkan daftar semua postingan.
2. create()
Fungsi ini digunakan untuk menampilkan halaman form pembuatan data baru.
public function create()
{
return view('posts.create'); // Mengembalikan view form untuk membuat data baru
}
view('posts.create')
: Mengembalikan viewcreate.blade.php
di folderposts
.
Tujuan: Menampilkan form kosong untuk memasukkan data baru.
3. store()
Fungsi ini digunakan untuk menyimpan data baru ke dalam database.
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required',
]);
Post::create($validated); // Menyimpan data ke database
return redirect()->route('posts.index')->with('success', 'Post created successfully.');
}
$request->validate([...])
: Memvalidasi input dari form:required
: Field wajib diisi.string
: Field harus berupa teks.max:255
: Batas maksimal karakter untuk fieldtitle
.
Post::create($validated)
: Menyimpan data yang sudah divalidasi ke tabelposts
.redirect()->route('posts.index')
: Mengarahkan kembali ke halaman daftar postingan (index
).with('success', ...)
: Menambahkan pesan sukses ke session flash.
Tujuan: Menyimpan data baru ke database.
4. edit()
Fungsi ini digunakan untuk menampilkan form pengeditan data yang sudah ada.
public function edit(Post $post)
{
return view('posts.edit', compact('post')); // Mengirim data spesifik ke view
}
Post $post
: Laravel secara otomatis mencari data berdasarkan parameter ID yang diterima di URL.compact('post')
: Mengirim data postingan spesifik ke view.view('posts.edit', ...)
: Mengembalikan viewedit.blade.php
dengan data postingan.
Tujuan: Menampilkan form dengan data yang sudah ada untuk diedit.
5. update()
Fungsi ini digunakan untuk memperbarui data yang sudah ada di database.
public function update(Request $request, Post $post)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required',
]);
$post->update($validated); // Memperbarui data di database
return redirect()->route('posts.index')->with('success', 'Post updated successfully.');
}
$request->validate([...])
: Memvalidasi input dari form.$post->update($validated)
: Memperbarui data pada instance modelPost
berdasarkan input yang sudah divalidasi.redirect()->route('posts.index')
: Mengarahkan kembali ke halaman daftar postingan.with('success', ...)
: Menambahkan pesan sukses ke session flash.
Tujuan: Memperbarui data pada database dengan nilai baru.
6. destroy()
Fungsi ini digunakan untuk menghapus data dari database.
public function destroy(Post $post)
{
$post->delete(); // Menghapus data dari database
return redirect()->route('posts.index')->with('success', 'Post deleted successfully.');
}
$post->delete()
: Menghapus data dari database berdasarkan ID yang diterima.redirect()->route('posts.index')
: Mengarahkan kembali ke halaman daftar postingan.with('success', ...)
: Menambahkan pesan sukses ke session flash.
Tujuan: Menghapus data dari database.
Setiap fungsi di PostController
memiliki tugas spesifik:
index()
: Menampilkan semua data.create()
: Menampilkan form untuk data baru.store()
: Menyimpan data baru ke database.edit()
: Menampilkan form pengeditan data.update()
: Memperbarui data yang sudah ada.destroy()
: Menghapus data dari database.
Dengan memahami setiap fungsi ini, Anda dapat mengimplementasikan CRUD di Laravel dengan efisien. Jangan lupa untuk memanfaatkan fitur bawaan Laravel seperti Eloquent ORM untuk menyederhanakan pengelolaan database.
6. Buat Routing
Edit file routes/web.php
:
use App\Http\Controllers\PostController;
Route::resource('posts', PostController::class);
7. Buat Blade Template
Buat folder resources/views/posts/
dan file berikut:
- index (index.blade.php)
@extends('layouts.app')
@section('content')
<div class="container">
<h1>All Posts</h1>
<a href="{{ route('posts.create') }}" class="btn btn-primary">Create Post</a>
<table class="table">
<thead>
<tr>
<th>ID</th>
<th>Title</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
@foreach($posts as $post)
<tr>
<td>{{ $post->id }}</td>
<td>{{ $post->title }}</td>
<td>
<a href="{{ route('posts.edit', $post->id) }}" class="btn btn-warning">Edit</a>
<form action="{{ route('posts.destroy', $post->id) }}" method="POST" style="display: inline;">
@csrf
@method('DELETE')
<button class="btn btn-danger">Delete</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
@endsection
- Create (
create.blade.php
)
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Create Post</h1>
<form action="{{ route('posts.store') }}" method="POST">
@csrf
<div class="form-group">
<label for="title">Title</label>
<input type="text" name="title" id="title" class="form-control">
</div>
<div class="form-group">
<label for="content">Content</label>
<textarea name="content" id="content" class="form-control"></textarea>
</div>
<button class="btn btn-success">Create</button>
</form>
</div>
@endsection
- Edit (
edit.blade.php
)
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Edit Post</h1>
<form action="{{ route('posts.update', $post->id) }}" method="POST">
@csrf
@method('PUT')
<div class="form-group">
<label for="title">Title</label>
<input type="text" name="title" id="title" class="form-control" value="{{ $post->title }}">
</div>
<div class="form-group">
<label for="content">Content</label>
<textarea name="content" id="content" class="form-control">{{ $post->content }}</textarea>
</div>
<button class="btn btn-success">Update</button>
</form>
</div>
@endsection
Kesimpulan
Membuat CRUD Laravel sangat mudah dengan bantuan Eloquent ORM, Blade Template, dan fitur routing. Dengan memahami dan mempraktikkan langkah-langkah di atas, Anda dapat mengelola data dalam aplikasi dengan efisien.
Jika Anda membutuhkan bantuan dalam membangun aplikasi berbasis Laravel, Arrazy Inovasi siap membantu Anda dengan layanan pengembangan aplikasi yang profesional dan berkualitas. Hubungi kami sekarang untuk solusi terbaik bagi bisnis Anda!