Belajar Laravel dari Migration hingga CRUD Menggunakan Pola MVC
Halo sobat developer! ๐
Masih semangat belajar Laravel? Di artikel sebelumnya kita sudah berhasil menginstal Laravel di Arch Linux. Sekarang, kita akan membahas tiga konsep penting dalam pengembangan aplikasi Laravel: Migration, MVC (Model-View-Controller), dan CRUD (Create, Read, Update, Delete). Yuk langsung kita mulai! ๐
Part 1: Database Migration
Apa sih Migration itu?
Bayangkan Migration seperti "version control untuk database" kamu. Mirip seperti Git yang mencatat setiap perubahan kode, Migration mencatat setiap perubahan struktur database kamu. Keren kan?
Dengan Migration, kamu bisa:
- ๐ Membuat dan mengubah struktur database menggunakan kode PHP
- ๐ค Berbagi struktur database dengan tim tanpa perlu share file SQL
- โฉ๏ธ Rollback perubahan jika ada kesalahan
- ๐ Memastikan struktur database konsisten di semua environment
- ๐งช Testing jadi lebih mudah karena bisa reset database kapan saja
Membuat Migration di Laravel
Untuk membuat migration baru, gunakan perintah artisan:
php artisan make:migration create_categories_table
Laravel akan membuat file migration di folder database/migrations
. Mari kita buat contoh tabel categories:
public function up()
{
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name'); // Nama kategori
$table->string('slug')->unique(); // URL-friendly name
$table->text('description')->nullable(); // Deskripsi (opsional)
$table->string('image')->nullable(); // Path gambar (opsional)
$table->timestamps();
});
}
Part 2: Mengenal MVC di Laravel
Apa itu MVC?
MVC (Model-View-Controller) adalah pola arsitektur yang membantu kita mengorganisir kode dengan lebih rapi. Bayangkan MVC seperti restoran:
- ๐จโ๐ณ Model: Koki yang mengolah bahan makanan (data)
- ๐ฝ๏ธ View: Pelayan yang menyajikan makanan ke pelanggan (tampilan)
- ๐งโ๐ผ Controller: Manajer yang mengkoordinasi semuanya
1. Model di Laravel
Model adalah representasi dari tabel database. Buat model Category dengan perintah:
php artisan make:model Category
Ini akan membuat file app/Models/Category.php
:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Category extends Model
{
protected $fillable = [
'name', 'slug', 'description', 'image'
];
// Otomatis mengisi slug dari name
protected static function boot()
{
parent::boot();
static::creating(function ($category) {
$category->slug = str()->slug($category->name);
});
}
}
2. View di Laravel
View adalah tampilan yang dilihat user. Laravel menggunakan Blade templating engine. Contoh view untuk menampilkan kategori (resources/views/dashboard/categories/index.blade.php
):
<x-app-layout>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 bg-white border-b border-gray-200">
<h2 class="text-2xl font-bold mb-4">Daftar Kategori</h2>
<div class="mb-4">
<a href="{{ route('categories.create') }}"
class="bg-blue-500 text-white px-4 py-2 rounded">
Tambah Kategori
</a>
</div>
<table class="min-w-full">
<thead>
<tr>
<th>Nama</th>
<th>Deskripsi</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@foreach($categories as $category)
<tr>
<td>{{ $category->name }}</td>
<td>{{ $category->description }}</td>
<td>
<a href="{{ route('categories.edit', $category) }}"
class="text-blue-500">Edit</a>
<form action="{{ route('categories.destroy', $category) }}"
method="POST" class="inline">
@csrf
@method('DELETE')
<button class="text-red-500">Hapus</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
</x-app-layout>
3. Controller di Laravel
Controller mengatur logika aplikasi. Buat CategoryController dengan perintah:
php artisan make:controller CategoryController --resource
Ini membuat controller dengan method CRUD lengkap:
namespace App\Http\Controllers;
use App\Models\Category;
use Illuminate\Http\Request;
class CategoryController extends Controller
{
public function index()
{
$categories = Category::latest()->get();
return view('dashboard.categories.index', compact('categories'));
}
public function create()
{
return view('dashboard.categories.create');
}
public function store(Request $request)
{
$validated = $request->validate([
'name' => 'required|max:255',
'description' => 'nullable',
'image' => 'nullable|image|max:2048'
]);
if ($request->hasFile('image')) {
$validated['image'] = $request->file('image')->store('categories');
}
Category::create($validated);
return redirect()
->route('categories.index')
->with('success', 'Kategori berhasil ditambahkan!');
}
// ... method lainnya untuk update dan delete
}
Part 3: Implementasi CRUD
CRUD adalah operasi dasar untuk mengelola data:
- Create: Membuat data baru
- Read: Membaca/menampilkan data
- Update: Mengubah data
- Delete: Menghapus data
1. Route untuk CRUD
Tambahkan route di routes/web.php
:
Route::resource('categories', CategoryController::class);
Satu baris kode ini membuat 7 route CRUD sekaligus! ๐
2. Form untuk Create & Update
Contoh form create/edit kategori:
<form action="{{ isset($category) ? route('categories.update', $category) : route('categories.store') }}"
method="POST"
enctype="multipart/form-data">
@csrf
@if(isset($category))
@method('PUT')
@endif
<div class="mb-4">
<label class="block">Nama Kategori</label>
<input type="text"
name="name"
value="{{ $category->name ?? old('name') }}"
class="w-full border rounded px-3 py-2">
</div>
<div class="mb-4">
<label class="block">Deskripsi</label>
<textarea name="description"
class="w-full border rounded px-3 py-2"
rows="3">{{ $category->description ?? old('description') }}</textarea>
</div>
<div class="mb-4">
<label class="block">Gambar</label>
<input type="file" name="image">
</div>
<button type="submit"
class="bg-blue-500 text-white px-4 py-2 rounded">
{{ isset($category) ? 'Update' : 'Simpan' }}
</button>
</form>
๐ก Tips dan Best Practices
-
Validasi Data
- Selalu validasi input user
- Gunakan Request classes untuk validasi kompleks
- Manfaatkan fitur Laravel untuk sanitasi data
-
Security
- Gunakan CSRF protection
- Implementasikan authorization dengan Gates/Policies
- Hindari mass assignment vulnerability
-
Code Organization
- Ikuti PSR standards
- Gunakan service classes untuk logic kompleks
- Manfaatkan Laravel helpers
-
Performance
- Cache data yang sering diakses
- Eager load relationships untuk menghindari N+1 query
- Optimize gambar sebelum upload
Yuk, Praktek Langsung! ๐
Selamat! Kamu sudah belajar konsep dasar pengembangan aplikasi Laravel:
- โ Migration untuk mengelola struktur database
- โ MVC untuk mengorganisir kode
- โ CRUD untuk operasi data
Sekarang saatnya praktek! Coba buat fitur kategori ini di project kamu. Eksperimen dengan berbagai fitur Laravel, tambahkan validasi, buat tampilan yang lebih menarik, dan jangan takut untuk mencoba hal baru!
Di artikel selanjutnya, kita akan belajar tentang:
- ๐ Authentication & Authorization
- ๐จ Frontend dengan Tailwind CSS
- ๐ฑ API Development
- Dan masih banyak lagi!
Remember: Practice makes perfect! ๏ฟฝ๏ฟฝ
Happy coding! ๐