Di Batch 4 ini, PahamITian akan menyelami dunia database di Laravel. Kita akan belajar bagaimana Laravel mempermudah pengelolaan database dengan Migration untuk membuat tabel dan Eloquent Model untuk berinteraksi dengan data, termasuk menyimpan, mengambil, dan mengubahnya.
- 1 Pengenalan Laravel: Memulai Petualangan Web dengan PHP Framework (Batch 1)
- 2 Routing dan Blade: Mengatur Alur Aplikasi dan Tampilan Cantik di Laravel (Batch 2)
- 3 Belajar Laravel Batch 3: Controller dan Form, Mengatur Logika dan Interaksi Pengguna
- 4 Belajar Laravel Batch 4: Database, Migration, dan Model - Mengelola Data Aplikasi
- 5 Belajar Laravel Batch 5: CRUD Lengkap - Menguasai Operasi Data Aplikasi
- 7 Belajar Laravel Batch 7: Authentication Dasar - Mengamankan Aplikasi dengan Login dan Register
- 8 Belajar Laravel Batch 6: Relasi Database Dasar - Menghubungkan Data Aplikasi
- 8 Belajar Laravel Batch 8: Upload File dan Storage - Mengelola Media Aplikasi
- 9 Belajar Laravel Batch 9: SEO dan Publish Status - Membuat Artikel Lebih Optimal dan Teratur
- 10 Belajar Laravel Batch 10: Mini Project Akhir - Membangun Blog Sederhana
- 11 Belajar Laravel Batch 11: Membangun RESTful API dengan Laravel
Halo, PahamITian! Selamat datang kembali di petualangan Laravel kita! Setelah di Batch 1 kita berkenalan dengan Laravel, di Batch 2 kita sudah jago mengatur alur aplikasi dengan Routing dan mempercantik tampilan dengan Blade, dan di Batch 3 kita sudah bisa berinteraksi dengan pengguna lewat Controller dan Form. Sekarang, saatnya kita masuk ke "jantung" sebuah aplikasi web yang dinamis: Database.
Tanpa database, aplikasi kita hanya bisa menampilkan data statis atau data yang hilang setiap kali halaman di-refresh. Di Batch 4 ini, kita akan belajar bagaimana Laravel mempermudah kita dalam mengelola database dengan dua fitur andalannya: Migration dan Eloquent Model.
Mari kita mulai!
1. Konsep Migration: "Version Control" untuk Database Kita
Pernahkah PahamITian membayangkan bagaimana jika kita bekerja dalam tim dan setiap orang mengubah struktur database secara manual? Pasti kacau, kan? Nah, di sinilah Migration berperan!
Migration di Laravel adalah seperti "version control" untuk skema database kita. Dengan migration, kita bisa membuat, mengubah, atau menghapus tabel database menggunakan kode PHP, bukan SQL manual. Ini punya banyak keuntungan:
- Konsisten: Semua anggota tim memiliki struktur database yang sama.
- Terlacak: Kita bisa melihat riwayat perubahan skema database.
- Mudah Di-rollback: Jika ada kesalahan, kita bisa dengan mudah mengembalikan perubahan.
- Database Agnostic: Kode migration kita bisa bekerja di berbagai jenis database (MySQL, PostgreSQL, SQLite, dll.) tanpa perlu mengubah kode.
Cara Membuat Migration
Untuk membuat file migration baru, kita pakai perintah Artisan:
php artisan make:migration create_posts_table
Perintah di atas akan membuat file baru di folder database/migrations dengan nama seperti 2023_10_27_123456_create_posts_table.php. Angka di depan adalah timestamp yang menunjukkan kapan migration itu dibuat.
Struktur File Migration
Setiap file migration memiliki dua metode utama:
up(): Metode ini akan dijalankan saat kita menjalankan migration (php artisan migrate). Di sinilah kita mendefinisikan perubahan yang ingin kita lakukan pada database (misalnya, membuat tabel baru).down(): Metode ini akan dijalankan saat kita me-rollback migration (php artisan migrate:rollback). Di sinilah kita mendefinisikan cara "mengembalikan" perubahan yang dilakukan oleh metodeup(). Jikaup()membuat tabel,down()akan menghapus tabel tersebut.
Contoh struktur dasar:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id(); // Kolom ID (primary key, auto-increment)
$table->string('title'); // Kolom string untuk judul
$table->text('content'); // Kolom text untuk isi artikel
$table->timestamps(); // Kolom created_at dan updated_at otomatis
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('posts'); // Hapus tabel posts jika di-rollback
}
};
Di dalam Schema::create(), kita menggunakan objek Blueprint untuk mendefinisikan kolom-kolom tabel. Beberapa tipe kolom yang sering digunakan:
$table->id(): Membuat kolomid(BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY).$table->string('nama_kolom'): Kolom string (VARCHAR).$table->text('nama_kolom'): Kolom teks panjang.$table->integer('nama_kolom'): Kolom integer.$table->boolean('nama_kolom'): Kolom boolean (TINYINT(1)).$table->timestamp('nama_kolom'): Kolom timestamp.$table->timestamps(): Membuat dua kolomcreated_atdanupdated_atsecara otomatis, yang akan diisi oleh Laravel saat data dibuat atau diubah.
Menjalankan Migration
Setelah membuat file migration, kita perlu menjalankannya agar perubahan diterapkan ke database. Pastikan PahamITian sudah mengkonfigurasi koneksi database di file .env (biasanya di Batch 1 kita sudah siapkan).
php artisan migrate
Perintah ini akan menjalankan semua migration yang belum pernah dijalankan.
Me-rollback Migration
Jika PahamITian melakukan kesalahan atau ingin mengembalikan perubahan migration terakhir, gunakan:
php artisan migrate:rollback
Ini akan menjalankan metode down() dari migration terakhir yang dijalankan.
2. Model Eloquent: Jembatan Antara Kode dan Database
Setelah kita punya tabel di database, bagaimana cara kita berinteraksi dengannya dari kode PHP? Di sinilah Eloquent ORM (Object-Relational Mapper) datang membantu. Eloquent adalah salah satu fitur paling powerful di Laravel.
Model Eloquent adalah representasi dari tabel database kita dalam bentuk kelas PHP. Setiap instance dari sebuah model biasanya mewakili satu baris (record) di tabel tersebut. Dengan Eloquent, kita bisa berinteraksi dengan database menggunakan sintaks PHP yang elegan, tanpa perlu menulis query SQL mentah!
Cara Membuat Model
Untuk membuat model baru, kita pakai perintah Artisan:
php artisan make:model Post
Perintah ini akan membuat file app/Models/Post.php. Secara default, Laravel akan mengasumsikan bahwa model Post akan berinteraksi dengan tabel bernama posts (nama model dalam bentuk plural dan huruf kecil).
Struktur Dasar Model
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
use HasFactory;
// Properti lain bisa ditambahkan di sini
}
3. Mass Assignment dan Properti fillable / guarded
Saat kita menyimpan data ke database menggunakan model, kita seringkali ingin mengisi beberapa kolom sekaligus. Ini disebut Mass Assignment. Contoh:
Post::create([
'title' => 'Judul Artikel Baru',
'content' => 'Isi artikel yang sangat menarik.'
]);
Namun, mass assignment bisa menjadi celah keamanan jika tidak dikontrol. Bayangkan jika ada kolom is_admin di tabel users, dan pengguna jahat mencoba mengirimkan data ['is_admin' => true] melalui form. Ini bisa membuat mereka menjadi admin!
Untuk mencegah ini, Laravel melindungi kita dengan mengharuskan kita secara eksplisit mendefinisikan kolom mana saja yang boleh diisi melalui mass assignment. Kita bisa menggunakan properti fillable atau guarded di model kita.
$fillable: Array yang berisi nama-nama kolom yang boleh diisi melalui mass assignment.$guarded: Array yang berisi nama-nama kolom yang tidak boleh diisi melalui mass assignment. Jikaguardeddiisi dengan[](array kosong), berarti semua kolom boleh diisi (hati-hati dengan ini!).
Lebih disarankan menggunakan $fillable karena lebih aman (whitelist).
Contoh di model Post.php:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content']; // Hanya kolom title dan content yang boleh diisi mass assignment
}
4. Query Dasar dengan Eloquent
Sekarang kita punya model Post dan tabel posts. Mari kita lihat bagaimana cara berinteraksi dengan data menggunakan Eloquent.
Mengambil Semua Data (all())
Untuk mengambil semua artikel dari tabel posts:
use App\Models\Post;
$posts = Post::all(); // Mengambil semua data dari tabel posts
foreach ($posts as $post) {
echo $post->title . "\n";
}
Mengambil Data Berdasarkan ID (find())
Untuk mengambil satu artikel berdasarkan primary key (ID):
use App\Models\Post;
$post = Post::find(1); // Mengambil artikel dengan ID 1
if ($post) {
echo $post->title;
} else {
echo "Artikel tidak ditemukan.";
}
Membuat Data Baru (create())
Untuk menyimpan artikel baru ke database:
use App\Models\Post;
$newPost = Post::create([
'title' => 'Judul Artikel Baru dari Eloquent',
'content' => 'Isi lengkap artikel ini.'
]);
echo "Artikel '" . $newPost->title . "' berhasil dibuat dengan ID: " . $newPost->id;
Ingat, create() hanya akan berhasil jika kolom-kolom yang diisi ada di properti $fillable model kita.
Mengupdate Data (update())
Untuk mengubah data artikel yang sudah ada:
use App\Models\Post;
$post = Post::find(1); // Ambil artikel dengan ID 1
if ($post) {
$post->update([
'title' => 'Judul Artikel Diperbarui',
'content' => 'Konten artikel juga diperbarui.'
]);
echo "Artikel '" . $post->title . "' berhasil diperbarui.";
} else {
echo "Artikel tidak ditemukan.";
}
Menghapus Data (delete())
Untuk menghapus artikel dari database:
use App\Models\Post;
$post = Post::find(1); // Ambil artikel dengan ID 1
if ($post) {
$post->delete();
echo "Artikel '" . $post->title . "' berhasil dihapus.";
} else {
echo "Artikel tidak ditemukan.";
}
Latihan Praktik: Membuat Tabel Posts dan Menyimpan Artikel
Mari kita terapkan semua yang sudah kita pelajari untuk membuat tabel posts dan menyimpan artikel dari form yang sudah kita buat di Batch 3.
Langkah 1: Konfigurasi Database (Verifikasi)
Pastikan file .env PahamITian sudah dikonfigurasi dengan benar untuk koneksi database. Contoh untuk MySQL:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database_kamu
DB_USERNAME=root
DB_PASSWORD=
Buat database baru di MySQL/phpMyAdmin dengan nama yang sama dengan DB_DATABASE.
Langkah 2: Membuat Migration untuk Tabel posts
Jalankan perintah ini di terminal:
php artisan make:migration create_posts_table
Edit file migration yang baru dibuat (misal: database/migrations/2023_10_27_xxxxxx_create_posts_table.php). Tambahkan kolom title dan content:
// ... (bagian atas file)
class CreatePostsTable 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');
}
};
Langkah 3: Jalankan Migration
php artisan migrate
Sekarang, cek database PahamITian. Seharusnya sudah ada tabel posts.
Langkah 4: Membuat Model Post
Jalankan perintah ini:
php artisan make:model Post
Edit file app/Models/Post.php dan tambahkan $fillable:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content'];
}
Langkah 5: Mengubah Controller untuk Menyimpan Data
Buka app/Http/Controllers/ArticleController.php (atau controller yang PahamITian gunakan untuk form artikel). Ubah metode store() (atau metode yang menerima data POST dari form) agar menyimpan data ke database menggunakan model Post.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Post; // Import model Post
class ArticleController extends Controller
{
public function create()
{
return view('articles.create');
}
public function store(Request $request)
{
// Validasi input (akan kita bahas lebih detail nanti)
$validatedData = $request->validate([
'title' => 'required|max:255',
'content' => 'required',
]);
// Simpan data ke database menggunakan model Post
Post::create($validatedData);
// Redirect dengan flash message
return redirect('/articles/create')->with('success', 'Artikel berhasil disimpan!');
}
}
Langkah 6: Coba Isi Form
Buka form artikel PahamITian di browser, isi judul dan konten, lalu submit. Jika berhasil, PahamITian akan melihat flash message "Artikel berhasil disimpan!". Cek database PahamITian, seharusnya sudah ada data artikel baru di tabel posts!
Selamat, PahamITian! PahamITian baru saja berhasil berinteraksi dengan database menggunakan Laravel Migration dan Eloquent Model!
Ringkasan Singkat Batch 4
Di Batch 4 ini, kita sudah belajar:
- Migration: Alat untuk mengelola skema database secara terstruktur dan version-controlled.
- Eloquent Model: Representasi tabel database dalam kode PHP, mempermudah interaksi dengan data.
- Mass Assignment: Cara mengisi banyak kolom sekaligus, dan pentingnya
$fillableatau$guardeduntuk keamanan. - Query Dasar Eloquent: Cara mengambil (
all(),find()), membuat (create()), mengupdate (update()), dan menghapus (delete()) data.
Pertanyaan Cek Pemahaman
- Apa fungsi utama dari Laravel Migration dan mengapa penting menggunakannya?
- Jelaskan perbedaan antara metode
up()dandown()dalam sebuah file migration! - Apa itu Eloquent Model dan bagaimana hubungannya dengan tabel di database?
- Mengapa properti
$fillableatau$guardedsangat penting dalam model Eloquent? - Bagaimana cara mengambil semua data dari sebuah tabel menggunakan Eloquent?
Kesalahan Umum Pemula
- Lupa
php artisan migrate: Setelah membuat atau mengubah file migration, selalu ingat untuk menjalankanphp artisan migrateagar perubahan diterapkan ke database. - Konfigurasi
.envsalah: Pastikan detail koneksi database di.envsudah benar dan database sudah dibuat. - Tidak menambahkan
$fillable: Ini adalah kesalahan umum saat menggunakancreate()atauupdate()dengan mass assignment. Laravel akan menolak menyimpan data jika kolom yang diisi tidak ada di$fillable(atau tidak diizinkan oleh$guarded). - Nama model dan tabel tidak sesuai: Secara default, model
Postakan mencari tabelposts. Jika nama tabel berbeda, PahamITian perlu mendefinisikannya secara eksplisit di model dengan properti$table(misal:protected $table = 'my_posts';).
Persiapan untuk Batch Berikutnya
Di Batch 4 ini kita sudah bisa menyimpan data. Tapi, bagaimana cara menampilkan daftar semua artikel? Atau bagaimana cara mengedit dan menghapus artikel yang sudah ada? Nah, di Batch 5 kita akan menyempurnakan kemampuan CRUD (Create, Read, Update, Delete) kita menjadi lebih lengkap dan terstruktur. Siap untuk membuat aplikasi kita semakin fungsional? Sampai jumpa di Batch 5!