Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

Laravel Diterbitkan: • Diperbarui: • 6 menit baca • 7 views

Laravel Migration & Eloquent: Panduan Database Modern

Juan Mths
Juan Mths
Chief Technology Officer & Administrator • Skor SEO: 100/100
Ilustrasi Laravel Migration & Eloquent: Panduan Database Modern
Laravel Featured Article Laravel Migration & Eloquent: Panduan Database Modern
Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

Laravel Migration dan Eloquent ORM adalah dua pilar manajemen basis data modern yang menyederhanakan siklus manipulasi skema dan data tanpa kueri SQL manual: Migration berfungsi sebagai sistem kontrol versi skema tabel berbasis kode PHP terstruktur, sedangkan Eloquent ORM berperan sebagai lapisan pemetaan objek-relasional (Active Record) yang menghubungkan baris data secara berorientasi objek. Duet ini memastikan arsitektur data aplikasi web modular, konsisten antar-lingkungan kerja tim, serta agnostik terhadap berbagai mesin basis data.

Dalam alur kerja pengembangan perangkat lunak tradisional, ketidaksinkronan skema sering terjadi akibat rutinitas impor dan ekspor berkas .sql lokal secara manual antar-anggota tim. Kebiasaan ini rawan memicu tabrakan struktur kolom, integritas data rusak, serta proses deployment yang berisiko tinggi di server produksi.

Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

Melalui otomatisasi deklarasi skema di Migration serta manipulasi data yang ekspresif di Eloquent, proses pemodelan relasi dan pengolahan data aplikasi berskala menengah hingga enterprise dapat dijalankan secara konsisten, aman dari celah injeksi parameter, dan siap diuji secara berkala.

1. Migration: Sistem Kendali Versi Skema Database

Migration berfungsi mencatat setiap evolusi struktur tabel basis data layaknya sistem kontrol versi Git. Seluruh berkas migrasi tersimpan terstruktur di dalam direktori database/migrations/ dan secara otomatis diberi awalan stempel waktu (timestamp) agar urutan eksekusi terjaga.

Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

Untuk membuat berkas migrasi tabel produk baru, jalankan perintah Artisan berikut melalui antarmuka baris perintah:

php artisan make:migration create_produks_table

Buka berkas migrasi yang dihasilkan, lalu tentukan atribut kolom-kolom tabel di dalam metode up() serta mekanisme pembatalan skema pada metode down():

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('produks', function (Blueprint $table) {
            $table->id();
            $table->string('nama_produk');
            $table->unsignedInteger('harga');
            $table->text('deskripsi')->nullable();
            $table->timestamps(); // Menghasilkan kolom created_at dan updated_at
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('produks');
    }
};

Setelah skema tabel ditentukan, eksekusi seluruh migrasi yang belum terpasang ke basis data aktif:

php artisan migrate
Diagram visual siklus eksekusi Laravel Migration

Tips Praktis dari Pengalaman Saya: Jangan pernah memodifikasi berkas migrasi lama yang sudah pernah dieksekusi di server staging maupun server produksi! Jika Anda perlu menambah, menghapus, atau mengganti tipe kolom, buat berkas migrasi baru menggunakan perintah spesifik seperti php artisan make:migration add_stok_to_produks_table --table=produks. Cara ini menjamin histori integritas skema basis data tim tetap sinkron tanpa merusak data rekaman yang sudah ada.

Tabel Perintah Esensial Artisan Migration dan Tipe Kolom Skema

Untuk mempermudah navigasi kerja harian, tabel berikut merangkum sintaks perintah terminal migrasi serta tipe kolom Blueprint yang paling sering digunakan dalam pengembangan modul aplikasi:

Perintah / Tipe Blueprint

Sintaks Kode

Kategori / Konteks

Fungsi dan Dampak Database

Migrate Status

php artisan migrate:status

Perintah CLI

Memeriksa status batch migrasi mana yang sudah maupun belum dieksekusi.

Migrate Rollback

php artisan migrate:rollback

Perintah CLI

Membatalkan eksekusi berkas migrasi pada batch operasional terakhir.

Migrate Fresh

php artisan migrate:fresh --seed

Perintah CLI

Menghapus seluruh tabel dari awal lalu menjalankan ulang seluruh skema dan seeder.

String Column

$table->string('nama', 100);

Skema Kolom

Menghasilkan kolom VARCHAR dengan batasan panjang karakter spesifik.

Foreign ID Constraint

$table->foreignId('user_id')->constrained();

Skema Kolom

Membentuk kolom UNSIGNED BIGINT sekaligus mengikat relasi foreign key otomatis.

2. Eloquent ORM: Representasi Tabel sebagai Objek PHP

Setiap tabel dalam basis data dipetakan ke dalam satu kelas Model yang mewarisi kemampuan kelas induk Illuminate\Database\Eloquent\Model. Secara konvensi, Laravel memetakan penamaan kelas model tunggal (singular camelCase) ke nama tabel jamak (plural snake_case), contohnya model Produk secara otomatis terhubung ke tabel produks.

Gunakan perintah Artisan berikut untuk menginisialisasi kelas model baru:

php artisan make:model Produk

Sebelum menggunakan fungsi penyimpanan data massal seperti Produk::create(), Anda wajib mendaftarkan atribut mana saja yang diizinkan untuk diisi secara massal melalui properti $fillable di dalam berkas app/Models/Produk.php:

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Produk extends Model
{
    use HasFactory;

    /**
     * Atribut yang dapat diisi secara massal (Mass Assignment Protection).
     *
     * @var array<int, string>
     */
    protected $fillable = [
        'nama_produk',
        'harga',
        'deskripsi'
    ];
}

Kesalahan Umum yang Sering Terjadi (Troubleshooting): Jika Anda mengeksekusi Model::create($request->all()) tanpa mendefinisikan array $fillable, aplikasi akan langsung melemparkan galat fatal Illuminate\Database\Eloquent\MassAssignmentException. Jangan tergoda mengatasi galat ini dengan menulis protected $guarded = []; kosong pada aplikasi komersial, karena pengguna jahat dapat menyisipkan payload HTTP kustom untuk membajak kolom hak akses seperti is_admin = 1 ke database Anda!

3. Contoh Operasi Data (CRUD) Menggunakan Eloquent

Setelah kelas model terkonfigurasi dengan benar, operasi manipulasi rekaman data (Create, Read, Update, Delete) di dalam berkas Controller dapat dituliskan secara intuitif melalui rantai metode berorientasi objek tanpa perlu merangkai string SQL mentah:

use App\Models\Produk;

// 1. Menambahkan data baru secara massal (Create)
$produkBaru = Produk::create([
    'nama_produk' => 'Monitor Gaming 24 Inci',
    'harga'       => 1850000,
    'deskripsi'   => 'Layar panel IPS refresh rate 144Hz'
]);

// 2. Mengambil data dengan filter dan pengurutan (Read)
$daftarProduk = Produk::where('harga', '>=', 1000000)
    ->orderBy('nama_produk', 'asc')
    ->take(10)
    ->get();

// 3. Mengubah data berdasarkan Primary Key (Update)
$produk = Produk::findOrFail(1);
$produk->harga = 1750000;
$produk->save();

// 4. Menghapus rekaman data (Delete)
$produk->delete();
Pemetaan atribut Model Eloquent Laravel terhadap kolom tabel database

Dengan memadukan Migration dan Eloquent ORM, arsitektur aplikasi Laravel menjadi sepenuhnya agnostik terhadap jenis mesin basis data: konfigurasi dapat dialihkan secara fleksibel dari MySQL ke PostgreSQL atau SQLite cukup melalui perubahan variabel lingkungan di berkas .env tanpa merombak satu baris pun kode logika bisnis Anda.

FAQ: Pertanyaan yang Sering Diajukan Seputar Laravel Migration dan Eloquent

1. Mengapa Laravel menyarankan penggunaan method findOrFail() dibanding find()?

Metode find() mengembalikan nilai null jika ID yang dicari tidak ada, sehingga pemanggilan atribut berikutnya berisiko memicu galat Attempt to read property on null. Sebaliknya, findOrFail() secara otomatis melempar pengecualian ModelNotFoundException yang langsung diterjemahkan Laravel menjadi respons halaman HTTP 404 Not Found yang aman dan ramah pengguna.

2. Apa perbedaan mendasar antara migrate:reset, migrate:rollback, dan migrate:fresh?

Perintah migrate:rollback hanya membatalkan operasi pada batch migrasi paling terakhir. Perintah migrate:reset membatalkan seluruh migrasi dari batch awal hingga akhir secara bertahap via method down(). Sedangkan migrate:fresh langsung menghapus seluruh tabel di database secara instan (DROP ALL TABLES) tanpa menjalankan method down(), lalu mengeksekusi ulang seluruh migrasi dari awal.

3. Bagaimana cara menentukan nama tabel kustom jika tidak mengikuti aturan penamaan bahasa Inggris?

Jika nama tabel Anda tidak berakhiran jamak bahasa Inggris (misalnya tabel transaksi_pembayaran), Anda cukup mendeklarasikan properti protected $table = 'transaksi_pembayaran'; secara eksplisit di dalam badan kelas Model bersangkutan untuk menimpa konvensi baku Laravel.

4. Apa fungsi dari fitur Soft Deletes pada Eloquent Model?

Fitur Soft Deletes menandai baris data yang dihapus dengan mengisi timestamp pada kolom deleted_at tanpa benar-benar membuang baris data secara permanen dari tabel fisik. Hal ini memungkinkan data yang terhapus tetap dapat dipulihkan kembali (restore) dan otomatis diabaikan dari kueri penelusuran standar.

Advertisement / Iklan
Google AdSense Responsive Unit

Ruang iklan proporsional (Zero CLS) bebas risiko klik tidak sengaja.

Diskusi & Komentar

0

Sampaikan pertanyaan teknis, masukan, atau feedback Anda seputar artikel ini.

Tulis Komentar
* Tautan dalam komentar otomatis diamankan dengan atribut rel="nofollow ugc". Maks 2.000 karakter
Moderasi aktif: komentar akan ditinjau sebelum terbit.

Belum Ada Komentar

Jadilah pembaca pertama yang memulai diskusi menarik atau bertanya seputar materi artikel ini!