Laravel 9 adalah framework PHP yang powerful dan elegan, sangat populer di kalangan developer web. Salah satu alasan popularitasnya adalah kemudahan dalam membuat aplikasi CRUD (Create, Read, Update, Delete). Jika Anda baru memulai atau ingin menyegarkan kembali pemahaman Anda tentang CRUD dengan Laravel 9, panduan ini dibuat untuk Anda. Kami akan membahas langkah demi langkah cara membuat CRUD dengan Laravel 9 secara praktis dan mudah dipahami.
Artikel ini akan membimbing Anda dari awal hingga akhir, memastikan Anda memahami setiap konsep dan langkah yang terlibat. Mari kita mulai!
1. Persiapan Awal: Instalasi Laravel 9 dan Konfigurasi Database
Sebelum kita masuk ke inti cara membuat CRUD dengan Laravel 9, pastikan Anda telah menyiapkan lingkungan pengembangan Anda. Ini termasuk menginstal Laravel 9 dan mengkonfigurasi koneksi database Anda.
a. Instalasi Laravel 9:
Jika Anda belum memiliki proyek Laravel 9, Anda dapat membuatnya menggunakan Composer:
composer create-project laravel/laravel nama-proyek
cd nama-proyek
Pastikan Anda sudah memiliki PHP (minimal versi 8.0) dan Composer terinstal di sistem Anda.
b. Konfigurasi Database:
Selanjutnya, konfigurasi koneksi database Anda. Buka file .env
di direktori proyek Anda. Cari bagian yang berkaitan dengan pengaturan database (DB_*) dan sesuaikan dengan detail database Anda. Contoh:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database_anda
DB_USERNAME=username_database_anda
DB_PASSWORD=password_database_anda
Ganti nama_database_anda
, username_database_anda
, dan password_database_anda
dengan informasi database yang sesuai. Jangan lupa untuk membuat database di server database Anda (misalnya MySQL, PostgreSQL, atau SQLite).
c. Migrasi Database Awal:
Setelah konfigurasi database selesai, jalankan perintah migrasi untuk membuat tabel-tabel awal (seperti users dan migrations):
php artisan migrate
Pastikan Anda tidak mendapatkan error selama proses migrasi. Jika terjadi error, periksa kembali konfigurasi database Anda.
2. Membuat Model dan Migrasi untuk Entitas Anda
Setelah persiapan awal selesai, langkah selanjutnya dalam cara membuat CRUD dengan Laravel 9 adalah membuat model dan migrasi untuk entitas yang ingin Anda kelola. Misalnya, kita akan membuat CRUD untuk data “Artikel”.
a. Membuat Model:
Gunakan perintah Artisan untuk membuat model:
php artisan make:model Artikel -m
Opsi -m
akan otomatis membuat file migrasi yang terkait dengan model Artikel
.
b. Definisi Skema Database di Migrasi:
Buka file migrasi yang baru dibuat (terletak di direktori database/migrations
) dan definisikan skema tabel artikels
. Contoh:
<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('artikels', function (Blueprint $table) {
$table->id();
$table->string('judul');
$table->text('isi');
$table->string('penulis');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('artikels');
}
};
Pastikan Anda menyesuaikan nama-nama kolom (judul
, isi
, penulis
) dengan kebutuhan Anda.
c. Menjalankan Migrasi:
Jalankan perintah migrasi untuk membuat tabel di database:
php artisan migrate
Sekarang, tabel artikels
sudah tersedia di database Anda.
d. Mendefinisikan Property di Model:
Buka file model Artikel
(terletak di direktori app/Models
) dan definisikan property $fillable
untuk menentukan kolom mana yang boleh diisi secara massal (mass assignment):
<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Artikel extends Model
{
use HasFactory;
protected $fillable = [
'judul',
'isi',
'penulis',
];
}
Ini penting untuk mencegah potensi masalah keamanan saat melakukan input data.
3. Membuat Controller untuk Mengatur Logika CRUD
Controller adalah jantung dari aplikasi CRUD Anda. Controller bertugas menerima request dari user, memproses data, dan mengembalikan response yang sesuai.
a. Membuat Controller:
Gunakan perintah Artisan untuk membuat controller:
php artisan make:controller ArtikelController --resource
Opsi --resource
akan otomatis membuat method-method yang dibutuhkan untuk operasi CRUD (index, create, store, show, edit, update, destroy).
b. Implementasi Method CRUD di Controller:
Buka file controller ArtikelController
(terletak di direktori app/Http/Controllers
) dan implementasikan logic untuk setiap method CRUD. Berikut adalah contoh implementasi dasar:
-
index(): Menampilkan daftar artikel:
public function index() { $artikels = Artikel::all(); // Ambil semua data artikel return view('artikels.index', compact('artikels')); // Kirim data ke view }
-
create(): Menampilkan form untuk membuat artikel baru:
public function create() { return view('artikels.create'); }
-
store(): Menyimpan artikel baru ke database:
public function store(Request $request) { $request->validate([ 'judul' => 'required', 'isi' => 'required', 'penulis' => 'required', ]); Artikel::create($request->all()); // Buat artikel baru return redirect()->route('artikels.index') // Redirect ke halaman index ->with('success','Artikel berhasil ditambahkan.'); // Tampilkan pesan sukses }
-
show(): Menampilkan detail artikel:
public function show(Artikel $artikel) { return view('artikels.show', compact('artikel')); }
-
edit(): Menampilkan form untuk mengedit artikel:
public function edit(Artikel $artikel) { return view('artikels.edit', compact('artikel')); }
-
update(): Mengupdate artikel di database:
public function update(Request $request, Artikel $artikel) { $request->validate([ 'judul' => 'required', 'isi' => 'required', 'penulis' => 'required', ]); $artikel->update($request->all()); // Update artikel return redirect()->route('artikels.index') // Redirect ke halaman index ->with('success','Artikel berhasil diupdate.'); // Tampilkan pesan sukses }
-
destroy(): Menghapus artikel dari database:
public function destroy(Artikel $artikel) { $artikel->delete(); // Hapus artikel return redirect()->route('artikels.index') // Redirect ke halaman index ->with('success','Artikel berhasil dihapus.'); // Tampilkan pesan sukses }
Pastikan Anda menyesuaikan validasi data ($request->validate
) dengan kebutuhan Anda. Validasi sangat penting untuk menjaga integritas data.
4. Membuat View untuk Tampilan CRUD
View adalah bagian yang bertanggung jawab untuk menampilkan data kepada user. Kita perlu membuat view untuk setiap operasi CRUD (index, create, show, edit).
a. Membuat Direktori View:
Buat direktori artikels
di dalam direktori resources/views
untuk menyimpan view-view terkait artikel.
b. Membuat File View:
Buat file-file view berikut di dalam direktori resources/views/artikels
:
index.blade.php
: Menampilkan daftar artikel.create.blade.php
: Form untuk membuat artikel baru.show.blade.php
: Menampilkan detail artikel.edit.blade.php
: Form untuk mengedit artikel.
c. Contoh Implementasi View index.blade.php
:
<!DOCTYPE html>
<html>
<head>
<title>Daftar Artikel</title>
</head>
<body>
<h1>Daftar Artikel</h1>
@if ($message = Session::get('success'))
<p>{{ $message }}</p>
@endif
<a href="{{ route('artikels.create') }}">Tambah Artikel Baru</a>
<table>
<thead>
<tr>
<th>Judul</th>
<th>Isi</th>
<th>Penulis</th>
<th>Aksi</th>
</tr>
</thead>
<tbody>
@foreach ($artikels as $artikel)
<tr>
<td>{{ $artikel->judul }}</td>
<td>{{ Str::limit($artikel->isi, 50) }}</td> <!-- Batasi tampilan isi -->
<td>{{ $artikel->penulis }}</td>
<td>
<a href="{{ route('artikels.show',$artikel->id) }}">Lihat</a>
<a href="{{ route('artikels.edit',$artikel->id) }}">Edit</a>
<form action="{{ route('artikels.destroy',$artikel->id) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit">Hapus</button>
</form>
</td>
</tr>
@endforeach
</tbody>
</table>
</body>
</html>
Contoh di atas menggunakan Blade template engine yang merupakan fitur bawaan Laravel. Pastikan Anda menyesuaikan struktur HTML dan tampilan sesuai dengan preferensi Anda. Anda juga bisa menggunakan library UI seperti Bootstrap atau Tailwind CSS untuk mempercantik tampilan.
d. Implementasi View Lainnya:
Implementasikan view create.blade.php
, show.blade.php
, dan edit.blade.php
dengan cara yang serupa. Gunakan form HTML untuk input data dan sesuaikan dengan kolom-kolom yang ada di tabel artikels
.
5. Mendefinisikan Rute untuk Akses CRUD
Rute (routes) menghubungkan URL dengan controller. Kita perlu mendefinisikan rute untuk setiap operasi CRUD agar user dapat mengaksesnya melalui browser.
a. Mendefinisikan Rute Resource:
Buka file routes/web.php
dan tambahkan rute resource untuk controller ArtikelController
:
use AppHttpControllersArtikelController;
use IlluminateSupportFacadesRoute;
Route::resource('artikels', ArtikelController::class);
Rute resource secara otomatis membuat rute untuk semua method CRUD yang ada di controller ArtikelController
. Ini adalah cara yang paling efisien untuk mendefinisikan rute CRUD.
b. Rute Tambahan (Optional):
Anda juga bisa mendefinisikan rute secara manual jika Anda membutuhkan kontrol yang lebih spesifik. Contoh:
Route::get('/artikels', [ArtikelController::class, 'index'])->name('artikels.index');
Route::get('/artikels/create', [ArtikelController::class, 'create'])->name('artikels.create');
// ... dan seterusnya
6. Menguji Aplikasi CRUD Anda
Setelah semua langkah di atas selesai, saatnya menguji aplikasi CRUD Anda.
a. Jalankan Server Pengembangan:
Jalankan server pengembangan Laravel:
php artisan serve
b. Akses Aplikasi Melalui Browser:
Buka browser dan akses URL yang sesuai (misalnya http://localhost:8000/artikels
).
c. Uji Semua Operasi CRUD:
Uji semua operasi CRUD (Create, Read, Update, Delete) untuk memastikan semuanya berfungsi dengan baik. Periksa apakah data tersimpan dengan benar di database dan apakah tampilan sudah sesuai dengan yang diharapkan.
d. Debugging:
Jika Anda menemukan error, gunakan fitur debugging Laravel (misalnya menggunakan dd()
atau dump()
) untuk mencari tahu penyebabnya. Periksa log error untuk informasi lebih detail.
7. Validasi Data yang Lebih Ketat
Validasi data adalah bagian penting dari setiap aplikasi CRUD. Kita sudah menyentuh validasi data di controller, tapi mari kita bahas lebih detail bagaimana melakukan validasi yang lebih ketat dan komprehensif.
a. Menggunakan Form Request:
Form Request adalah cara yang lebih terstruktur untuk melakukan validasi. Buat Form Request untuk validasi data artikel:
php artisan make:request StoreArtikelRequest
php artisan make:request UpdateArtikelRequest
b. Mendefinisikan Aturan Validasi di Form Request:
Buka file StoreArtikelRequest
dan UpdateArtikelRequest
(terletak di direktori app/Http/Requests
) dan definisikan aturan validasi di method rules()
:
<?php
namespace AppHttpRequests;
use IlluminateFoundationHttpFormRequest;
class StoreArtikelRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true; // Atur ke true jika tidak ada otorisasi khusus
}
/**
* Get the validation rules that apply to the request.
*
* @return array<string, mixed>
*/
public function rules()
{
return [
'judul' => 'required|max:255',
'isi' => 'required',
'penulis' => 'required|max:100',
];
}
}
Contoh di atas menambahkan aturan validasi untuk judul
(harus diisi dan maksimal 255 karakter), isi
(harus diisi), dan penulis
(harus diisi dan maksimal 100 karakter).
c. Menggunakan Form Request di Controller:
Gunakan Form Request di method store()
dan update()
di controller:
public function store(StoreArtikelRequest $request)
{
Artikel::create($request->validated()); // Gunakan validated() untuk mendapatkan data yang sudah divalidasi
return redirect()->route('artikels.index')
->with('success','Artikel berhasil ditambahkan.');
}
public function update(UpdateArtikelRequest $request, Artikel $artikel)
{
$artikel->update($request->validated());
return redirect()->route('artikels.index')
->with('success','Artikel berhasil diupdate.');
}
Dengan menggunakan Form Request, kode controller menjadi lebih bersih dan fokus pada logika bisnis.
8. Menambahkan Fitur Pencarian dan Pagination (Opsional)
Untuk aplikasi dengan data yang banyak, menambahkan fitur pencarian dan pagination sangat membantu user dalam menemukan dan menavigasi data.
a. Implementasi Pencarian:
Ubah method index()
di controller untuk menambahkan fitur pencarian:
public function index(Request $request)
{
$keyword = $request->get('keyword');
$artikels = Artikel::when($keyword, function ($query) use ($keyword) {
$query->where('judul', 'like', "%$keyword%")
->orWhere('isi', 'like', "%$keyword%")
->orWhere('penulis', 'like', "%$keyword%");
})->paginate(10); // Tampilkan 10 artikel per halaman
return view('artikels.index', compact('artikels', 'keyword'));
}
Contoh di atas menggunakan when()
untuk menambahkan kondisi pencarian jika ada keyword yang dikirimkan. Pencarian dilakukan pada kolom judul
, isi
, dan penulis
.
b. Implementasi Pagination:
Di view index.blade.php
, tambahkan link pagination:
{{ $artikels->links() }}
Laravel secara otomatis akan membuat link pagination berdasarkan data yang di-paginate.
c. Menambahkan Input Pencarian di View:
Tambahkan input pencarian di view index.blade.php
:
<form action="{{ route('artikels.index') }}" method="GET">
<input type="text" name="keyword" placeholder="Cari artikel..." value="{{ $keyword ?? '' }}">
<button type="submit">Cari</button>
</form>
9. Mengamankan Aplikasi CRUD Anda
Keamanan adalah aspek penting dalam pengembangan aplikasi web. Pastikan Anda mengambil langkah-langkah untuk mengamankan aplikasi CRUD Anda.
a. Proteksi terhadap Mass Assignment:
Pastikan Anda selalu menggunakan property $fillable
atau $guarded
di model untuk melindungi dari serangan mass assignment.
b. XSS Protection:
Gunakan Blade template engine dengan benar untuk mencegah serangan XSS (Cross-Site Scripting). Blade secara otomatis melakukan escaping terhadap data yang ditampilkan. Jika Anda perlu menampilkan HTML mentah, gunakan sintaks {{!! $variable !!}}
dengan hati-hati dan pastikan data tersebut aman.
c. CSRF Protection:
Laravel secara otomatis menyediakan proteksi CSRF (Cross-Site Request Forgery). Pastikan Anda selalu menyertakan token CSRF di semua form:
<form method="POST" action="...">
@csrf
<!-- ... -->
</form>
d. Otentikasi dan Otorisasi:
Terapkan sistem otentikasi dan otorisasi untuk membatasi akses ke fitur CRUD hanya untuk user yang berwenang. Anda bisa menggunakan fitur otentikasi bawaan Laravel atau mengimplementasikan sistem otentikasi sendiri.
10. Refactoring dan Optimasi Kode
Setelah aplikasi CRUD Anda berfungsi, luangkan waktu untuk melakukan refactoring dan optimasi kode.
a. DRY (Don’t Repeat Yourself):
Hindari pengulangan kode. Buat helper functions atau components jika Anda memiliki kode yang digunakan berulang kali.
b. KISS (Keep It Simple, Stupid):
Usahakan agar kode tetap sederhana dan mudah dipahami. Hindari kompleksitas yang tidak perlu.
c. Optimasi Query Database:
Gunakan eager loading (misalnya with()
) untuk mengurangi jumlah query database. Gunakan caching untuk menyimpan data yang sering diakses.
d. Testing:
Tulis unit test dan feature test untuk memastikan kode Anda berfungsi dengan benar dan mencegah regression.
11. Menggunakan Library Tambahan untuk Mempermudah Pengembangan CRUD (Optional)
Ada beberapa library Laravel yang dapat mempermudah dan mempercepat proses pengembangan CRUD.
a. Laravel Nova:
Laravel Nova adalah admin panel yang sangat powerful dan mudah digunakan. Dengan Laravel Nova, Anda dapat membuat CRUD interface yang elegan dan fungsional dengan cepat.
b. Backpack for Laravel:
Backpack for Laravel adalah framework admin yang fleksibel dan dapat dikustomisasi. Backpack menyediakan banyak fitur bawaan untuk membuat CRUD interface, seperti filter, column types, dan operation types.
c. Filament:
Filament adalah collection tools untuk Laravel yang fokus pada simple and elegance. Memberikan tools yang lebih modern dalam pembuatan admin panel.
12. Kesimpulan: Menguasai CRUD dengan Laravel 9
Selamat! Anda telah mempelajari cara membuat CRUD dengan Laravel 9 secara komprehensif. Dari persiapan awal hingga pengamanan aplikasi, kita telah membahas setiap langkah yang terlibat. Ingatlah bahwa kunci untuk menguasai CRUD dengan Laravel 9 adalah praktik dan eksplorasi. Jangan takut untuk mencoba, bereksperimen, dan terus belajar. Dengan panduan ini sebagai dasar, Anda akan dapat membangun aplikasi CRUD yang powerful dan efisien dengan Laravel 9.
Semoga artikel ini bermanfaat! Selamat mencoba dan sukses dengan proyek Laravel Anda.