Laravel 9 adalah salah satu framework PHP paling populer yang banyak digunakan untuk mengembangkan aplikasi web modern. Salah satu alasan popularitasnya adalah kemudahannya dalam membuat aplikasi CRUD (Create, Read, Update, Delete). Dalam artikel ini, kita akan membahas secara mendalam cara membuat CRUD sederhana dengan Laravel 9, lengkap dengan kode yang bisa langsung Anda gunakan dan penjelasan detail langkah demi langkah. Mari kita mulai!
1. Apa Itu CRUD dan Mengapa Penting dalam Pengembangan Web?
Sebelum kita masuk ke kode, mari kita pahami dulu apa itu CRUD. CRUD adalah singkatan dari Create, Read, Update, dan Delete. Ini adalah empat operasi dasar yang biasanya dilakukan pada data dalam sebuah aplikasi. Setiap aplikasi web yang berinteraksi dengan database pasti menggunakan operasi CRUD.
- Create: Menambah data baru ke dalam database.
- Read: Membaca atau menampilkan data dari database.
- Update: Mengubah atau memperbarui data yang sudah ada dalam database.
- Delete: Menghapus data dari database.
Menguasai konsep CRUD adalah fundamental bagi setiap pengembang web. Dengan memahami CRUD, Anda dapat membangun aplikasi yang memungkinkan pengguna untuk mengelola data mereka dengan mudah. Laravel 9 menyediakan alat dan fitur yang mempermudah implementasi CRUD, membuatnya menjadi pilihan yang ideal untuk pengembangan web.
2. Persiapan Awal: Instalasi Laravel 9 dan Konfigurasi Database
Sebelum mulai coding, kita perlu memastikan Laravel 9 sudah terinstal dengan benar dan database sudah terkonfigurasi. Berikut langkah-langkahnya:
-
Instalasi Laravel 9:
-
Pastikan PHP dan Composer sudah terinstal di komputer Anda.
-
Buka terminal atau command prompt.
-
Jalankan perintah berikut:
composer create-project laravel/laravel nama-aplikasi
Ganti
nama-aplikasi
dengan nama yang Anda inginkan. Contoh:crud-laravel9
. -
Setelah proses instalasi selesai, masuk ke direktori aplikasi:
cd nama-aplikasi
-
-
Konfigurasi Database:
-
Buka file
.env
yang ada di direktori aplikasi Anda. -
Cari baris yang dimulai dengan
DB_
. -
Ubah nilai-nilai tersebut sesuai dengan konfigurasi database Anda. Contoh:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=nama_database DB_USERNAME=nama_pengguna DB_PASSWORD=kata_sandi
Pastikan database dengan nama
nama_database
sudah dibuat. Anda bisa menggunakan phpMyAdmin, MySQL Workbench, atau alat lainnya untuk membuat database.
-
-
Migrasi Database:
-
Laravel menggunakan migrasi untuk membuat dan memodifikasi tabel database.
-
Jalankan perintah berikut untuk menjalankan migrasi default Laravel:
php artisan migrate
Ini akan membuat tabel
users
,password_resets
,failed_jobs
, danpersonal_access_tokens
di database Anda.
-
3. Membuat Model dan Migrasi untuk Data yang Akan Dikelola (Contoh: Buku
)
Sekarang kita akan membuat model dan migrasi untuk data yang akan kita kelola. Dalam contoh ini, kita akan membuat CRUD untuk data Buku
.
-
Membuat Model dan Migrasi:
-
Jalankan perintah berikut untuk membuat model
Buku
dan migrasi sekaligus:php artisan make:model Buku -m
Ini akan membuat dua file:
app/Models/Buku.php
(model) dandatabase/migrations/[tanggal]_create_bukus_table.php
(migrasi).
-
-
Memodifikasi Migrasi:
-
Buka file migrasi yang baru dibuat.
-
Tambahkan kolom-kolom yang dibutuhkan untuk tabel
bukus
. Contoh:<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; return new class extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('bukus', function (Blueprint $table) { $table->id(); $table->string('judul'); $table->string('penulis'); $table->integer('tahun_terbit'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('bukus'); } };
Kode di atas akan membuat tabel
bukus
dengan kolomid
,judul
,penulis
,tahun_terbit
,created_at
, danupdated_at
.
-
-
Menjalankan Migrasi:
-
Jalankan kembali perintah migrasi:
php artisan migrate
Ini akan membuat tabel
bukus
di database Anda.
-
-
Memodifikasi Model:
-
Buka file
app/Models/Buku.php
. -
Tambahkan
$fillable
untuk menentukan kolom mana yang boleh diisi oleh pengguna:<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Buku extends Model { use HasFactory; protected $fillable = ['judul', 'penulis', 'tahun_terbit']; }
$fillable
adalah array yang berisi nama-nama kolom yang boleh diisi. Ini adalah langkah penting untuk mencegah mass assignment vulnerability.
-
4. Membuat Controller untuk Menangani Logika CRUD dengan Laravel 9
Controller adalah tempat kita menulis logika untuk menangani permintaan HTTP dan berinteraksi dengan model. Mari kita buat controller untuk Buku
.
-
Membuat Controller:
-
Jalankan perintah berikut untuk membuat controller
BukuController
:php artisan make:controller BukuController --resource
Opsi
--resource
akan membuat controller dengan method-method standar untuk CRUD (index, create, store, show, edit, update, destroy).
-
-
Menulis Logika CRUD di Controller:
-
Buka file
app/Http/Controllers/BukuController.php
. -
Berikut adalah implementasi lengkap dari method-method CRUD:
<?php namespace AppHttpControllers; use AppModelsBuku; use IlluminateHttpRequest; class BukuController extends Controller { /** * Display a listing of the resource. * * @return IlluminateHttpResponse */ public function index() { $bukus = Buku::all(); // Mengambil semua data buku return view('bukus.index', compact('bukus')); } /** * Show the form for creating a new resource. * * @return IlluminateHttpResponse */ public function create() { return view('bukus.create'); // Menampilkan form untuk membuat buku baru } /** * Store a newly created resource in storage. * * @param IlluminateHttpRequest $request * @return IlluminateHttpResponse */ public function store(Request $request) { $request->validate([ 'judul' => 'required', 'penulis' => 'required', 'tahun_terbit' => 'required|integer', ]); Buku::create($request->all()); // Membuat buku baru return redirect()->route('bukus.index') ->with('success', 'Buku berhasil ditambahkan.'); } /** * Display the specified resource. * * @param AppModelsBuku $buku * @return IlluminateHttpResponse */ public function show(Buku $buku) { return view('bukus.show', compact('buku')); // Menampilkan detail buku } /** * Show the form for editing the specified resource. * * @param AppModelsBuku $buku * @return IlluminateHttpResponse */ public function edit(Buku $buku) { return view('bukus.edit', compact('buku')); // Menampilkan form untuk mengedit buku } /** * Update the specified resource in storage. * * @param IlluminateHttpRequest $request * @param AppModelsBuku $buku * @return IlluminateHttpResponse */ public function update(Request $request, Buku $buku) { $request->validate([ 'judul' => 'required', 'penulis' => 'required', 'tahun_terbit' => 'required|integer', ]); $buku->update($request->all()); // Memperbarui data buku return redirect()->route('bukus.index') ->with('success', 'Buku berhasil diperbarui.'); } /** * Remove the specified resource from storage. * * @param AppModelsBuku $buku * @return IlluminateHttpResponse */ public function destroy(Buku $buku) { $buku->delete(); // Menghapus data buku return redirect()->route('bukus.index') ->with('success', 'Buku berhasil dihapus.'); } }
Setiap method di atas memiliki fungsi masing-masing sesuai dengan operasi CRUD. Perhatikan penggunaan
Buku::all()
,Buku::create()
,$buku->update()
, dan$buku->delete()
untuk berinteraksi dengan model dan database. Validasi data juga penting untuk memastikan data yang masuk valid.
-
5. Membuat View untuk Menampilkan Data dan Form Input
View adalah tampilan yang dilihat oleh pengguna. Kita perlu membuat view untuk menampilkan daftar buku, form untuk membuat buku baru, form untuk mengedit buku, dan detail buku.
-
Membuat Direktori
bukus
diresources/views
:- Buat direktori
bukus
di dalam direktoriresources/views
. - Di dalam direktori
bukus
, buat file-file berikut:index.blade.php
(untuk menampilkan daftar buku)create.blade.php
(untuk menampilkan form pembuatan buku)edit.blade.php
(untuk menampilkan form edit buku)show.blade.php
(untuk menampilkan detail buku)
- Buat direktori
-
Implementasi View:
-
Berikut adalah contoh implementasi masing-masing view:
resources/views/bukus/index.blade.php
:<!DOCTYPE html> <html> <head> <title>Daftar Buku</title> </head> <body> <h1>Daftar Buku</h1> @if ($message = Session::get('success')) <p style="color: green;">{{ $message }}</p> @endif <a href="{{ route('bukus.create') }}">Tambah Buku Baru</a> <table> <thead> <tr> <th>Judul</th> <th>Penulis</th> <th>Tahun Terbit</th> <th>Aksi</th> </tr> </thead> <tbody> @foreach ($bukus as $buku) <tr> <td>{{ $buku->judul }}</td> <td>{{ $buku->penulis }}</td> <td>{{ $buku->tahun_terbit }}</td> <td> <a href="{{ route('bukus.show', $buku->id) }}">Lihat</a> <a href="{{ route('bukus.edit', $buku->id) }}">Edit</a> <form action="{{ route('bukus.destroy', $buku->id) }}" method="POST"> @csrf @method('DELETE') <button type="submit" onclick="return confirm('Apakah Anda yakin ingin menghapus buku ini?')">Hapus</button> </form> </td> </tr> @endforeach </tbody> </table> </body> </html>
resources/views/bukus/create.blade.php
:<!DOCTYPE html> <html> <head> <title>Tambah Buku Baru</title> </head> <body> <h1>Tambah Buku Baru</h1> @if ($errors->any()) <div style="color: red;"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="{{ route('bukus.store') }}" method="POST"> @csrf <label for="judul">Judul:</label><br> <input type="text" id="judul" name="judul"><br><br> <label for="penulis">Penulis:</label><br> <input type="text" id="penulis" name="penulis"><br><br> <label for="tahun_terbit">Tahun Terbit:</label><br> <input type="number" id="tahun_terbit" name="tahun_terbit"><br><br> <button type="submit">Simpan</button> <a href="{{ route('bukus.index') }}">Batal</a> </form> </body> </html>
resources/views/bukus/edit.blade.php
:<!DOCTYPE html> <html> <head> <title>Edit Buku</title> </head> <body> <h1>Edit Buku</h1> @if ($errors->any()) <div style="color: red;"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="{{ route('bukus.update', $buku->id) }}" method="POST"> @csrf @method('PUT') <label for="judul">Judul:</label><br> <input type="text" id="judul" name="judul" value="{{ $buku->judul }}"><br><br> <label for="penulis">Penulis:</label><br> <input type="text" id="penulis" name="penulis" value="{{ $buku->penulis }}"><br><br> <label for="tahun_terbit">Tahun Terbit:</label><br> <input type="number" id="tahun_terbit" name="tahun_terbit" value="{{ $buku->tahun_terbit }}"><br><br> <button type="submit">Simpan</button> <a href="{{ route('bukus.index') }}">Batal</a> </form> </body> </html>
resources/views/bukus/show.blade.php
:<!DOCTYPE html> <html> <head> <title>Detail Buku</title> </head> <body> <h1>Detail Buku</h1> <p>Judul: {{ $buku->judul }}</p> <p>Penulis: {{ $buku->penulis }}</p> <p>Tahun Terbit: {{ $buku->tahun_terbit }}</p> <a href="{{ route('bukus.index') }}">Kembali</a> </body> </html>
Pastikan Anda memahami struktur HTML dan penggunaan Blade syntax seperti
@foreach
,@if
,@csrf
, dan@method
.
-
6. Mendefinisikan Route untuk Mengakses Controller
Route adalah cara kita menghubungkan URL dengan controller. Kita perlu mendefinisikan route untuk mengakses method-method CRUD di BukuController
.
-
Mendefinisikan Route:
-
Buka file
routes/web.php
. -
Tambahkan route resource untuk
BukuController
:<?php use AppHttpControllersBukuController; use IlluminateSupportFacadesRoute; /* |-------------------------------------------------------------------------- | Web Routes |-------------------------------------------------------------------------- | | Here is where you can register web routes for your application. These | routes are loaded by the RouteServiceProvider within a group which | contains the "web" middleware group. Now create something great! | */ Route::get('/', function () { return view('welcome'); }); Route::resource('bukus', BukuController::class);
Route::resource('bukus', BukuController::class)
akan secara otomatis membuat route untuk semua method CRUD diBukuController
. Ini adalah cara yang sangat efisien untuk mendefinisikan route untuk controller resource.
-
7. Menguji Aplikasi CRUD Laravel 9 Anda
Setelah semua langkah di atas selesai, Anda bisa menguji aplikasi CRUD Anda.
-
Menjalankan Server Development:
-
Buka terminal atau command prompt.
-
Jalankan perintah berikut:
php artisan serve
Ini akan menjalankan server development Laravel di
http://127.0.0.1:8000
.
-
-
Mengakses Aplikasi:
- Buka browser Anda dan akses
http://127.0.0.1:8000/bukus
. - Anda akan melihat daftar buku (jika ada).
- Klik “Tambah Buku Baru” untuk membuat buku baru.
- Klik “Lihat”, “Edit”, atau “Hapus” pada setiap buku untuk melakukan operasi CRUD lainnya.
- Buka browser Anda dan akses
8. Tips dan Praktik Terbaik dalam Membuat CRUD dengan Laravel
Berikut adalah beberapa tips dan praktik terbaik untuk membuat CRUD dengan Laravel:
- Validasi Data: Selalu validasi data yang masuk dari pengguna untuk mencegah kesalahan dan serangan. Laravel menyediakan fitur validasi yang sangat mudah digunakan.
- Otorisasi: Pastikan hanya pengguna yang berhak yang dapat mengakses dan memodifikasi data. Gunakan fitur otorisasi Laravel untuk mengontrol akses ke controller dan model.
- Middleware: Gunakan middleware untuk menerapkan logika yang berjalan sebelum atau sesudah permintaan. Contohnya, Anda bisa menggunakan middleware untuk memeriksa apakah pengguna sudah login sebelum mengakses halaman tertentu.
- Resource Controllers: Manfaatkan resource controllers untuk membuat controller dengan method-method standar untuk CRUD. Ini akan menghemat waktu dan membuat kode Anda lebih terstruktur.
- Eloquent ORM: Gunakan Eloquent ORM untuk berinteraksi dengan database. Eloquent menyediakan cara yang mudah dan aman untuk melakukan operasi CRUD.
- Blade Templates: Gunakan Blade templates untuk membuat view yang dinamis dan mudah dipelihara. Blade menyediakan fitur-fitur seperti inheritance, components, dan directives.
- Dependency Injection: Gunakan dependency injection untuk membuat kode Anda lebih modular dan mudah diuji. Laravel menyediakan container dependency injection yang sangat kuat.
- Testing: Tulis unit test dan feature test untuk memastikan kode Anda berfungsi dengan benar. Laravel menyediakan alat dan fitur untuk membuat testing lebih mudah.
9. Menggunakan Relasi Database untuk CRUD yang Lebih Kompleks
CRUD yang kita buat di atas adalah CRUD sederhana dengan satu tabel. Namun, dalam banyak kasus, kita perlu membuat CRUD yang melibatkan relasi antar tabel. Contohnya, kita mungkin ingin membuat CRUD untuk data Penulis
dan setiap penulis memiliki banyak Buku
.
Untuk membuat CRUD dengan relasi database, kita perlu:
-
Mendefinisikan Relasi di Model:
- Di model
Penulis
, kita perlu mendefinisikan relasi hasMany ke modelBuku
. - Di model
Buku
, kita perlu mendefinisikan relasi belongsTo ke modelPenulis
.
- Di model
-
Memodifikasi Migrasi:
- Tambahkan foreign key ke tabel
bukus
untuk menghubungkannya dengan tabelpenulis
.
- Tambahkan foreign key ke tabel
-
Memodifikasi Controller dan View:
- Di controller, kita perlu mengambil data penulis dan buku secara bersamaan.
- Di view, kita perlu menampilkan data penulis dan buku.
10. Kesimpulan: CRUD Laravel 9 Sederhana dan Efisien
Dalam artikel ini, kita telah membahas secara mendalam cara membuat CRUD sederhana dengan Laravel 9, mulai dari persiapan awal hingga pengujian aplikasi. Kita juga telah membahas tips dan praktik terbaik untuk membuat CRUD yang lebih efisien dan aman. Dengan mengikuti langkah-langkah dan tips ini, Anda akan dapat membangun aplikasi web CRUD dengan Laravel 9 dengan mudah dan cepat. Selamat mencoba dan semoga berhasil!