Laravel 9 adalah framework PHP yang populer karena kemudahan dan fiturnya yang kaya. Salah satu hal mendasar yang perlu dikuasai dalam pengembangan web adalah CRUD (Create, Read, Update, Delete). Tutorial ini dirancang khusus untuk pemula yang ingin belajar membuat CRUD sederhana dengan Laravel 9. Jangan khawatir, kita akan membahasnya langkah demi langkah agar kamu bisa langsung praktik!
1. Apa Itu CRUD dan Mengapa Penting dalam Pengembangan Web?
CRUD adalah singkatan dari Create, Read, Update, dan Delete. Ini adalah empat operasi dasar yang sering dilakukan pada data dalam sebuah aplikasi. Bayangkan sebuah aplikasi manajemen data karyawan. Kamu pasti ingin bisa:
- Create (Membuat): Menambahkan data karyawan baru.
- Read (Membaca): Melihat daftar karyawan atau detail informasi seorang karyawan.
- Update (Memperbarui): Mengubah informasi karyawan, seperti nomor telepon atau alamat.
- Delete (Menghapus): Menghapus data karyawan yang sudah tidak aktif.
CRUD adalah fondasi dari banyak aplikasi web. Dengan menguasai CRUD, kamu bisa membangun aplikasi yang lebih kompleks dan fungsional. Jadi, tutorial membuat CRUD sederhana dengan Laravel 9 ini sangat penting untuk memulai karirmu sebagai web developer.
2. Persiapan Awal: Instalasi Laravel 9 dan Konfigurasi Database
Sebelum mulai membuat CRUD sederhana dengan Laravel 9, kita perlu memastikan Laravel sudah terinstall dengan benar dan terhubung ke database. Berikut langkah-langkahnya:
-
Install Composer: Pastikan kamu sudah menginstall Composer, dependency manager untuk PHP. Jika belum, unduh dan install dari https://getcomposer.org/.
-
Buat Proyek Laravel Baru: Buka terminal atau command prompt, lalu jalankan perintah berikut untuk membuat proyek Laravel baru:
composer create-project laravel/laravel:^9.0 crud-laravel9 cd crud-laravel9
Ganti
crud-laravel9
dengan nama proyek yang kamu inginkan. -
Konfigurasi Database: Buka file
.env
di direktori proyekmu. Cari bagian yang berhubungan dengan database dan sesuaikan dengan pengaturan database lokalmu. Contohnya:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=crud_laravel9 # Ganti dengan nama database yang kamu buat DB_USERNAME=root # Ganti dengan username database kamu DB_PASSWORD= # Ganti dengan password database kamu
Pastikan kamu sudah membuat database dengan nama
crud_laravel9
(atau nama yang kamu tentukan) melalui phpMyAdmin atau tool database lainnya. -
Jalankan Migrasi Awal: Laravel sudah menyediakan migrasi awal untuk tabel
users
. Jalankan perintah berikut untuk membuat tabel tersebut di database:php artisan migrate
Jika berhasil, tabel
users
,failed_jobs
, danpersonal_access_tokens
akan terbuat di database.
3. Membuat Model dan Migrasi untuk Tabel “Produk” (Studi Kasus)
Dalam tutorial membuat CRUD sederhana dengan Laravel 9 ini, kita akan membuat aplikasi CRUD untuk mengelola data produk. Langkah pertama adalah membuat model dan migrasi untuk tabel products
.
-
Buat Model dan Migrasi Sekaligus: Gunakan perintah Artisan untuk membuat model
Product
dan migrasi untuk tabelproducts
:php artisan make:model Product -m
Perintah ini akan membuat dua file:
app/Models/Product.php
(model) dandatabase/migrations/xxxx_xx_xx_xxxxxx_create_products_table.php
(migrasi). -
Definisikan Skema Tabel di Migrasi: Buka file migrasi yang baru dibuat. Di dalam method
up()
, definisikan skema tabelproducts
. Contoh:<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; return new class extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('products', function (Blueprint $table) { $table->id(); $table->string('name'); $table->text('description')->nullable(); $table->decimal('price', 10, 2); $table->integer('stock'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('products'); } };
Penjelasan:
$table->id()
: Membuat kolomid
sebagai primary key yang auto-increment.$table->string('name')
: Membuat kolomname
dengan tipe data string.$table->text('description')->nullable()
: Membuat kolomdescription
dengan tipe data text dan boleh kosong (nullable).$table->decimal('price', 10, 2)
: Membuat kolomprice
dengan tipe data decimal dengan presisi 10 dan 2 angka di belakang koma.$table->integer('stock')
: Membuat kolomstock
dengan tipe data integer.$table->timestamps()
: Membuat kolomcreated_at
danupdated_at
untuk mencatat waktu pembuatan dan pembaruan data.
-
Jalankan Migrasi: Jalankan kembali perintah migrasi:
php artisan migrate
Sekarang, tabel
products
sudah terbuat di database. -
Definisikan Fillable di Model: Buka file
app/Models/Product.php
. Di dalam classProduct
, tambahkan properti$fillable
untuk menentukan kolom mana yang boleh diisi (mass assignment):<?php namespace AppModels; use IlluminateDatabaseEloquentFactoriesHasFactory; use IlluminateDatabaseEloquentModel; class Product extends Model { use HasFactory; protected $fillable = [ 'name', 'description', 'price', 'stock', ]; }
Ini penting untuk mencegah vulnerability mass assignment.
4. Membuat Controller untuk Mengatur Logika CRUD Produk
Controller bertugas mengatur logika aplikasi. Kita akan membuat controller ProductController
untuk menangani operasi CRUD pada produk.
-
Buat Controller: Gunakan perintah Artisan untuk membuat controller
ProductController
:php artisan make:controller ProductController
File
app/Http/Controllers/ProductController.php
akan terbuat. -
Implementasikan Method Index (Menampilkan Daftar Produk): Di dalam
ProductController
, tambahkan methodindex
untuk menampilkan daftar semua produk:<?php namespace AppHttpControllers; use AppModelsProduct; use IlluminateHttpRequest; class ProductController extends Controller { public function index() { $products = Product::all(); return view('products.index', compact('products')); } // ... (method lain akan ditambahkan di bawah) }
Penjelasan:
Product::all()
: Mengambil semua data dari tabelproducts
.return view('products.index', compact('products'))
: Mengirim data$products
ke viewproducts.index
. Kita akan membuat view ini nanti.
-
Implementasikan Method Create (Menampilkan Form Pembuatan Produk): Tambahkan method
create
untuk menampilkan form pembuatan produk:public function create() { return view('products.create'); }
-
Implementasikan Method Store (Menyimpan Produk Baru): Tambahkan method
store
untuk menyimpan produk baru ke database:public function store(Request $request) { $request->validate([ 'name' => 'required', 'price' => 'required|numeric', 'stock' => 'required|integer', ]); Product::create($request->all()); return redirect()->route('products.index') ->with('success','Produk berhasil ditambahkan.'); }
Penjelasan:
$request->validate(...)
: Melakukan validasi data yang dikirim dari form. Kita memastikan kolomname
,price
, danstock
wajib diisi.Product::create($request->all())
: Membuat produk baru menggunakan data yang dikirim dari form.$request->all()
mengambil semua data input.return redirect()->route('products.index')
: Mengarahkan pengguna kembali ke halaman daftar produk setelah berhasil menyimpan.->with('success','Produk berhasil ditambahkan.')
: Menambahkan pesan sukses ke session untuk ditampilkan di halaman daftar produk.
-
Implementasikan Method Show (Menampilkan Detail Produk): Tambahkan method
show
untuk menampilkan detail informasi sebuah produk:public function show(Product $product) { return view('products.show', compact('product')); }
Penjelasan:
Product $product
: Laravel secara otomatis mencari data produk berdasarkan ID yang dikirimkan di URL.
-
Implementasikan Method Edit (Menampilkan Form Edit Produk): Tambahkan method
edit
untuk menampilkan form edit produk:public function edit(Product $product) { return view('products.edit', compact('product')); }
-
Implementasikan Method Update (Memperbarui Produk): Tambahkan method
update
untuk memperbarui data produk di database:public function update(Request $request, Product $product) { $request->validate([ 'name' => 'required', 'price' => 'required|numeric', 'stock' => 'required|integer', ]); $product->update($request->all()); return redirect()->route('products.index') ->with('success','Produk berhasil diperbarui.'); }
Penjelasan:
$product->update($request->all())
: Memperbarui data produk dengan data yang dikirim dari form.
-
Implementasikan Method Destroy (Menghapus Produk): Tambahkan method
destroy
untuk menghapus produk dari database:public function destroy(Product $product) { $product->delete(); return redirect()->route('products.index') ->with('success','Produk berhasil dihapus.'); }
5. Membuat View untuk Menampilkan Data Produk (Blade Templates)
View bertugas menampilkan data ke pengguna. Kita akan membuat view menggunakan Blade templating engine bawaan Laravel. Buat direktori resources/views/products
untuk menyimpan view produk.
-
Buat
resources/views/products/index.blade.php
(Daftar Produk):<!DOCTYPE html> <html> <head> <title>CRUD Produk</title> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> @if ($message = Session::get('success')) <div class="alert alert-success"> <p>{{ $message }}</p> </div> @endif <h1>Daftar Produk</h1> <a class="btn btn-success" href="{{ route('products.create') }}"> Tambah Produk</a> <table class="table table-bordered"> <tr> <th>No</th> <th>Nama</th> <th>Harga</th> <th>Stock</th> <th width="280px">Aksi</th> </tr> @foreach ($products as $product) <tr> <td>{{ ++$i }}</td> <td>{{ $product->name }}</td> <td>{{ $product->price }}</td> <td>{{ $product->stock }}</td> <td> <form action="{{ route('products.destroy',$product->id) }}" method="POST"> <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">Show</a> <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">Edit</a> @csrf @method('DELETE') <button type="submit" class="btn btn-danger">Delete</button> </form> </td> </tr> @endforeach </table> {!! $products->links() !!} </div> </body> </html>
Perhatikan penggunaan Blade directives seperti
@foreach
,@if
,{{ ... }}
, dan{!! ... !!}
. -
Buat
resources/views/products/create.blade.php
(Form Tambah Produk):<!DOCTYPE html> <html> <head> <title>Tambah Produk</title> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <h1>Tambah Produk Baru</h1> <form action="{{ route('products.store') }}" method="POST"> @csrf <div class="mb-3"> <label for="name" class="form-label">Nama Produk:</label> <input type="text" class="form-control" id="name" name="name" required> </div> <div class="mb-3"> <label for="description" class="form-label">Deskripsi:</label> <textarea class="form-control" id="description" name="description" rows="3"></textarea> </div> <div class="mb-3"> <label for="price" class="form-label">Harga:</label> <input type="number" step="0.01" class="form-control" id="price" name="price" required> </div> <div class="mb-3"> <label for="stock" class="form-label">Stock:</label> <input type="number" class="form-control" id="stock" name="stock" required> </div> <button type="submit" class="btn btn-primary">Simpan</button> <a class="btn btn-secondary" href="{{ route('products.index') }}">Batal</a> </form> </div> </body> </html>
-
Buat
resources/views/products/show.blade.php
(Detail Produk):<!DOCTYPE html> <html> <head> <title>Detail Produk</title> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <h1>Detail Produk</h1> <div class="card"> <div class="card-body"> <h5 class="card-title">{{ $product->name }}</h5> <p class="card-text">{{ $product->description }}</p> </div> <ul class="list-group list-group-flush"> <li class="list-group-item"><strong>Harga:</strong> Rp {{ number_format($product->price, 2, ',', '.') }}</li> <li class="list-group-item"><strong>Stock:</strong> {{ $product->stock }}</li> </ul> <div class="card-body"> <a href="{{ route('products.index') }}" class="btn btn-primary">Kembali</a> </div> </div> </div> </body> </html>
-
Buat
resources/views/products/edit.blade.php
(Form Edit Produk):<!DOCTYPE html> <html> <head> <title>Edit Produk</title> <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"> </head> <body> <div class="container"> <h1>Edit Produk</h1> <form action="{{ route('products.update', $product->id) }}" method="POST"> @csrf @method('PUT') <div class="mb-3"> <label for="name" class="form-label">Nama Produk:</label> <input type="text" class="form-control" id="name" name="name" value="{{ $product->name }}" required> </div> <div class="mb-3"> <label for="description" class="form-label">Deskripsi:</label> <textarea class="form-control" id="description" name="description" rows="3">{{ $product->description }}</textarea> </div> <div class="mb-3"> <label for="price" class="form-label">Harga:</label> <input type="number" step="0.01" class="form-control" id="price" name="price" value="{{ $product->price }}" required> </div> <div class="mb-3"> <label for="stock" class="form-label">Stock:</label> <input type="number" class="form-control" id="stock" name="stock" value="{{ $product->stock }}" required> </div> <button type="submit" class="btn btn-primary">Update</button> <a class="btn btn-secondary" href="{{ route('products.index') }}">Batal</a> </form> </div> </body> </html>
6. Konfigurasi Route (Rute) untuk Mengakses Controller
Route menentukan URL mana yang akan mengakses method controller yang mana. Buka file routes/web.php
dan tambahkan resource route untuk products
:
<?php
use IlluminateSupportFacadesRoute;
use AppHttpControllersProductController;
/*
|--------------------------------------------------------------------------
| 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('products', ProductController::class);
Route::resource('products', ProductController::class)
secara otomatis membuat route untuk semua operasi CRUD (index, create, store, show, edit, update, destroy) yang mengarah ke method yang sesuai di ProductController
.
7. Menguji Aplikasi CRUD Produk yang Telah Dibuat
Sekarang, saatnya menguji aplikasi CRUD yang telah kita buat.
-
Jalankan Server Pengembangan Laravel:
php artisan serve
Buka browser dan akses
http://localhost:8000/products
. -
Uji Semua Fitur:
- Create: Coba tambahkan produk baru. Pastikan data tersimpan dengan benar di database.
- Read: Lihat daftar produk dan detail setiap produk.
- Update: Edit data produk dan pastikan perubahan tersimpan.
- Delete: Hapus produk dan pastikan data terhapus dari database.
Jika semua fitur berjalan dengan baik, selamat! Kamu telah berhasil membuat CRUD sederhana dengan Laravel 9.
8. Optimasi dan Pengembangan Lebih Lanjut
Setelah berhasil membuat CRUD dasar, ada beberapa hal yang bisa kamu optimasi dan kembangkan lebih lanjut:
- Validasi Data Lebih Lanjut: Tambahkan validasi yang lebih kompleks pada form, misalnya validasi format email atau panjang karakter.
- Autentikasi dan Otorisasi: Terapkan sistem login dan otorisasi agar hanya pengguna yang berwenang yang bisa mengakses atau mengubah data. Kamu bisa menggunakan Laravel Breeze atau Jetstream untuk implementasi yang lebih cepat.
- Paginasi: Jika data produk sudah banyak, implementasikan paginasi agar tampilan lebih rapi dan performa lebih baik. Laravel sudah menyediakan fitur paginasi yang mudah digunakan.
- Upload Gambar: Tambahkan fitur upload gambar untuk produk.
- Relasi Database: Jika produk memiliki kategori, implementasikan relasi database antara tabel
products
dancategories
. - Pencarian (Search): Tambahkan fitur pencarian produk berdasarkan nama atau deskripsi.
- Penggunaan AJAX: Ganti beberapa operasi CRUD dengan AJAX agar tidak perlu me-refresh halaman.
- Testing: Buat unit test dan feature test untuk memastikan kode kamu berfungsi dengan benar dan stabil.
- Refactoring: Setelah kode berfungsi, luangkan waktu untuk merapikan kode dan membuatnya lebih mudah dibaca dan dipelihara.
9. Tips dan Trik dalam Pengembangan CRUD dengan Laravel 9
Berikut beberapa tips dan trik yang bisa kamu terapkan dalam pengembangan CRUD dengan Laravel 9:
- Gunakan Resource Controller:
Route::resource
sangat membantu untuk mempersingkat penulisan route CRUD. - Manfaatkan Eloquent ORM: Eloquent ORM memudahkan interaksi dengan database. Pelajari method-method yang tersedia, seperti
find
,where
,orderBy
, dan sebagainya. - Gunakan Validation Rules: Laravel menyediakan banyak validation rules yang bisa kamu gunakan untuk memvalidasi data input. Gunakan validation rules yang sesuai untuk setiap field.
- Blade Directives: Manfaatkan Blade directives seperti
@if
,@foreach
,@include
, dan@extends
untuk membuat view yang lebih modular dan mudah dibaca. - Konsisten dengan Konvensi Laravel: Ikuti konvensi penamaan dan struktur direktori Laravel agar kode kamu mudah dipahami oleh developer lain.
- Baca Dokumentasi Laravel: Dokumentasi Laravel sangat lengkap dan bermanfaat. Jadikan dokumentasi sebagai referensi utama saat mengembangkan aplikasi.
- Bergabung dengan Komunitas Laravel: Bergabung dengan forum atau grup Laravel untuk bertanya dan berbagi pengalaman dengan developer lain.
- Practice Makes Perfect: Semakin banyak kamu praktik membuat CRUD sederhana dengan Laravel 9, semakin mahir kamu dalam pengembangan web.
10. Kesimpulan: Laravel 9 untuk Pengembangan CRUD yang Efisien
Tutorial membuat CRUD sederhana dengan Laravel 9 ini diharapkan bisa membantumu memulai karir sebagai web developer. Laravel 9 menyediakan fitur-fitur yang memudahkan dan mempercepat proses pengembangan CRUD. Dengan mengikuti langkah-langkah di atas dan terus berlatih, kamu akan bisa membangun aplikasi CRUD yang kompleks dan fungsional. Jangan ragu untuk bereksperimen dan mencoba fitur-fitur lain dari Laravel 9. Selamat mencoba dan semoga sukses!
11. Sumber Belajar Tambahan untuk Memperdalam Pemahaman Laravel 9
Untuk memperdalam pemahamanmu tentang Laravel 9 dan pengembangan web secara umum, berikut beberapa sumber belajar tambahan yang bisa kamu manfaatkan:
- Dokumentasi Resmi Laravel: https://laravel.com/docs/9.x
- Laracasts: https://laracasts.com/ – Platform pembelajaran online dengan banyak video tutorial tentang Laravel.
- Laravel News: https://laravel-news.com/ – Website yang berisi berita, tips, dan tutorial tentang Laravel.
- Stack Overflow: https://stackoverflow.com/ – Tempat bertanya dan mencari jawaban atas masalah pemrograman.
- YouTube: Cari tutorial Laravel 9 di YouTube. Ada banyak channel yang menyediakan video tutorial gratis.
- Buku: Cari buku tentang Laravel 9 di toko buku online atau offline.
Dengan memanfaatkan sumber-sumber belajar ini, kamu bisa meningkatkan kemampuanmu dalam pengembangan web dan menjadi developer Laravel yang handal. Jangan lupa, tutorial membuat CRUD sederhana dengan Laravel 9 ini hanyalah langkah awal. Teruslah belajar dan berkembang!