Membangun CRUD Sederhana di Laravel: Panduan Praktis
Bikin aplikasi CRUD itu salah satu skill paling dasar tapi juga paling sering dibutuhin buat developer web. Gini deh, kalau kamu lagi belajar Laravel 11, bikin aplikasi sederhana untuk mengelola postingan itu langkah yang pas buat mulai. Di akhir panduan ini, kamu bakal punya aplikasi yang bisa Create, Read, Update, Delete postingan dengan mudah.
1. Instal Laravel dan Jalankan Server
Pastikan Composer sudah terpasang, terus jalankan:
composer create-project --prefer-dist laravel/laravel laravel-crud
cd laravel-crud
php artisan serve
Akses aplikasi di http://localhost:8000
. Simple kan?
2. Konfigurasi Basis Data
Buka .env
dan sesuaikan kredensial database:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=user_database
DB_PASSWORD=password_database
3. Buat Model & Migrasi
Generate model Post
dengan migrasi:
php artisan make:model Post -m
Edit migrasi di database/migrations
:
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
Migrasikan database:
php artisan migrate
4. Buat Controller CRUD
Generate PostController
:
php artisan make:controller PostController
Tambahkan metode CRUD di app/Http/Controllers/PostController.php
:
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) {
$request->validate(['title'=>'required|max:255','content'=>'required']);
Post::create($request->all());
return redirect()->route('posts.index');
}
public function show(Post $post) { return view('posts.show', compact('post')); }
public function edit(Post $post) { return view('posts.edit', compact('post')); }
public function update(Request $request, Post $post) {
$request->validate(['title'=>'required|max:255','content'=>'required']);
$post->update($request->all());
return redirect()->route('posts.index');
}
public function destroy(Post $post) { $post->delete(); return redirect()->route('posts.index'); }
}
5. Siapkan Model Post
Biar mass assignment bisa jalan, edit app/Models/Post.php
:
class Post extends Model
{
use HasFactory;
protected $fillable = ['title', 'content'];
}
6. Buat View Blade
Laravel pakai Blade. kita buat layout dasar di resources/views/layouts/app.blade.php
:
<html>
<head><title>CRUD App - @yield('title')</title></head>
<body>
<div class="container">@yield('content')</div>
</body>
</html>
Contoh index.blade.php
:
@extends('layouts.app')
@section('content')
<h1>Posts</h1>
<a href="{{ route('posts.create') }}">Create New Post</a>
<ul>
@foreach($posts as $post)
<li>
<a href="{{ route('posts.show', $post) }}">{{ $post->title }}</a>
<a href="{{ route('posts.edit', $post) }}">Edit</a>
<form action="{{ route('posts.destroy', $post) }}" method="POST" style="display:inline;">
@csrf @method('DELETE')
<button type="submit">Delete</button>
</form>
</li>
@endforeach
</ul>
@endsection
View lainnya (create
, edit
, show
) mirip, tinggal sesuaikan form dan tombol.
7. Definisikan Rute
Tambahkan di routes/web.php
:
use App\Http\Controllers\PostController;
Route::resource('posts', PostController::class);
8. Uji Aplikasi
Akses http://localhost:8000/posts
. Coba bikin, edit, lihat, dan hapus postingan. Gini deh, kalau pas lagi uji coba, saya pernah laptop mati tiba-tiba pas lagi ngetes form panjang—jadi inget, backup sebelum nge-test itu penting 😅.
Kesimpulan
Pada akhirnya, bikin CRUD di Laravel itu straightforward tapi ngasih dasar kuat buat belajar fitur Laravel lebih dalam. Sekarang kamu bisa lanjut ke validasi lebih kompleks, relasi antar tabel, atau bahkan integrasi dengan Vue/Livewire. Dengan fondasi ini, eksperimen itu jadi lebih mudah dan menyenangkan.