Pada episode sebelumnya tentang Controller dan MVC Laravel 13, kita memahami bagaimana request mengalir melalui route → controller → view. Namun controller kami hanya mengembalikan data dummy (hardcoded). Kini kita tambah layer terakhir: database — tempat data nyata disimpan dan diambil aplikasi.
Laravel menyediakan dua fitur utama untuk bekerja dengan database: Migration (untuk membuat dan mengelola struktur tabel) dan Eloquent ORM (untuk berinteraksi dengan data via kode PHP). Kombinasi keduanya membuat developer tidak perlu lagi menulis raw SQL manual.
Setup Koneksi Database di .env
Langkah pertama adalah memberi tahu Laravel di mana database kamu berada. File konfigurasi utama ada di .env (environment file) di root project.
Buka file .env kamu. Cari baris berikut:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=Sesuaikan dengan setup MySQL lokal kamu. Misalnya, jika kamu menggunakan MySQL default di localhost dengan user root tanpa password, biarkan seperti itu. Jika ingin nama database berbeda, ubah DB_DATABASE menjadi nama yang kamu inginkan (misal: laravel_blog).
Tips: Pastikan MySQL server sudah running sebelum melanjutkan. Di Windows, start "MySQL80" dari Services; di Mac/Linux, cek status dengan sudo systemctl status mysql.
Apa Itu Migration? Versi Kontrol untuk Database
Bayangkan kamu bekerja dalam tim, dan rekan kerja menambah kolom baru di tabel. Biasanya kamu perlu manual menjalankan ALTER TABLE di komputer kamu. Repot, kan? Laravel menyediakan solusi: Migration.
Migration adalah file PHP yang berisi instruksi membuat, mengubah, atau menghapus tabel database. File-file ini bisa disimpan di repository Git bersama kode, sehingga rekan kerja bisa menjalankan semua migration dengan satu perintah, dan struktur database mereka otomatis sama.
Keuntungan Migration:
- Version Control: Setiap perubahan database tercatat di Git seperti kode biasa
- Kolaborasi: Tim bisa sync struktur database instant
- Rollback: Bisa batalkan perubahan database jika terjadi kesalahan
- Environment Konsisten: Development, staging, dan production punya struktur sama
Membuat & Menjalankan Migration
Mari buat migration untuk tabel "posts". Buka terminal di folder project Laravel kamu, lalu jalankan:
php artisan make:migration create_posts_tablePerintah artisan ini membuat file baru di folder database/migrations/ dengan nama seperti 2024_01_15_120000_create_posts_table.php (timestamp otomatis). Buka file tersebut:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('posts');
}
};Di sini kita mendefinisikan struktur tabel posts dengan kolom:
id()– Primary key, auto incrementtitle– String (varchar), untuk judul postcontent– Text, untuk isi posttimestamps()– Otomatis nambah kolom created_at dan updated_at
Method up() menjalankan saat migration dijalankan; method down() menjalankan saat rollback (batalkan migration).
Sekarang jalankan migration dengan perintah:
php artisan migrateLaravel akan membuat database (jika belum ada) dan menjalankan semua file migration. Cek phpMyAdmin atau MySQL CLI — tabel "posts" seharusnya sudah ada. Sukses! Kamu baru saja membuat struktur database pakai kode, tanpa perintah SQL manual.
Apa Itu Eloquent ORM? SQL dalam Kode PHP
ORM singkatan dari Object-Relational Mapping. Konsepnya sederhana: setiap tabel database dipresentasikan sebagai class PHP (disebut Model). Setiap row di tabel jadi instance dari class itu.
Eloquent adalah ORM bawaan Laravel yang powerful. Dengan Eloquent, kamu query database pakai syntax PHP natural, tanpa nulis SQL:
Post::all()– Ambil semua posts (SELECT * FROM posts)Post::find(1)– Ambil post dengan id=1 (SELECT * FROM posts WHERE id=1)Post::create(['title' => 'Halo', 'content' => 'Isi'])– Insert data baru$post->delete()– Hapus post
Keindahan Eloquent: kode kamu tetap readable, dan Laravel otomatis mengkonversi ke SQL yang tepat di belakang layar. Bahkan relationship antar tabel (foreign key) jadi sesimple method call.
CRUD Dasar dengan Eloquent
CRUD = Create, Read, Update, Delete — operasi dasar database. Mari lihat contoh konkret di controller. Asumsikan sudah punya route dan model (kita buat di step berikutnya). Di controller, operasinya terlihat seperti ini:
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
// READ: Ambil semua posts
public function index()
{
$posts = Post::all();
return view('posts.index', compact('posts'));
}
// CREATE: Simpan post baru
public function store(Request $request)
{
Post::create([
'title' => $request->title,
'content' => $request->content,
]);
return redirect('/posts');
}
// READ: Ambil satu post berdasarkan ID
public function show($id)
{
$post = Post::find($id);
return view('posts.show', compact('post'));
}
// UPDATE: Ubah post
public function update(Request $request, $id)
{
$post = Post::find($id);
$post->update([
'title' => $request->title,
'content' => $request->content,
]);
return redirect('/posts');
}
// DELETE: Hapus post
public function destroy($id)
{
Post::find($id)->delete();
return redirect('/posts');
}
}Lihat betapa sederhana? Tidak ada raw SQL sama sekali. Eloquent menangani semuanya. Method seperti all(), find(), create(), update(), delete() adalah bagian dari BaseModel Eloquent yang otomatis tersedia di setiap Model kamu.
Latihan: Buat Model Post dan Isi Data
Sekarang mari praktik. Pertama, buat Model untuk tabel posts. Di terminal, jalankan:
php artisan make:model PostIni membuat file app/Models/Post.php. Buka dan lihat isinya:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}Property $fillable menentukan kolom mana saja yang boleh di-assign mass assignment (saat pakai create() atau update()). Ini keamanan: jika ada kolom sensitif seperti is_admin, jangan masukkan di $fillable.
Sekarang, mari test CRUD dari Tinker (REPL bawaan Laravel). Buka terminal:
php artisan tinkerSekarang kamu di shell interaktif Laravel. Mari buat post pertama:
>>> Post::create(['title' => 'Pertama Kali Belajar Laravel', 'content' => 'Saya baru belajar Eloquent ORM hari ini!'])Enter. Eloquent akan insert data ke tabel posts dan mengembalikan instance Post dengan id=1. Sekarang ambil semua posts:
>>> Post::all()Seharusnya muncul array dengan post yang baru dibuat. Coba cari berdasarkan id:
>>> $post = Post::find(1)
>>> $post->titleKeluar dari Tinker dengan exit.
Itu dia! Kamu baru saja melakukan CRUD tanpa menulis satu baris SQL pun. Semua handled oleh Eloquent ORM. Bayangkan saat tabel punya 20 kolom dan relasi kompleks — Eloquent tetap membuat kode kamu clean dan natural.
Selanjutnya: Relationship dan Query Lanjutan
Setelah mahir CRUD dasar, topik next adalah Relationship (one-to-many, many-to-many) dan Query Builder advanced (where, orderBy, limit, join). Tapi untuk episode kali ini, fokus adalah memahami fondasi: migration dan CRUD dasar.
Referensi lengkap untuk Eloquent bisa kamu baca di dokumentasi resmi Eloquent dan dokumentasi Migration.
Kesimpulan
Database adalah jantung aplikasi modern. Dengan Migration dan Eloquent ORM, Laravel menjadikan pekerjaan database developer jauh lebih nyaman. Kamu tidak perlu lagi menulis SQL manual atau mengkhawatirkan sinkronisasi struktur database antar environment — semuanya ada di kode, bisa di-commit ke Git, dan dijalankan dengan satu command.
Sekarang kamu sudah punya fondasi solid: route (episode #3), view (episode #4), controller (episode #5), dan database (episode #6). Aplikasi kamu kini bisa menerima request, query database, dan merender data dinamis. Di episode berikutnya, kita akan menghubungkan semuanya dalam satu flow utuh dan explore fitur-fitur lanjutan Laravel. Keep coding! 🚀