Membuat CRUD Projek Sewa Mobil dengan PHP Laravel 11
Pendahuluan
Dengan semakin maraknya pariwisata, kebutuhan akan layanan sewa mobil semakin meningkat, terutama di bandara untuk wisatawan yang ingin berlibur. Banyak pengusaha yang melihat peluang ini dengan menyewakan mobil mereka dan menjangkau lebih banyak pelanggan melalui platform online. Memiliki website untuk bisnis sewa mobil tidak hanya mempermudah pengelolaan bisnis, tetapi juga membantu menjangkau pasar yang lebih luas dan memberikan kemudahan bagi pelanggan dalam melakukan booking mobil.
Dalam artikel ini, kita akan membahas langkah-langkah untuk membuat projek CRUD (Create, Read, Update, Delete) sewa mobil menggunakan PHP Laravel 11. Tutorial ini akan mencakup persiapan lingkungan pengembangan, desain database, pengaturan Laravel, dan implementasi fitur CRUD untuk mengelola mobil sewaan.
Persiapan
Sebelum memulai proyek, kita perlu menyiapkan lingkungan pengembangan. Berikut adalah beberapa alat yang perlu diinstal:
PHP: Bahasa pemrograman yang digunakan untuk pengembangan Laravel.Composer: Manajer dependensi untuk PHP.XAMPP: Paket perangkat lunak yang mencakup Apache, MySQL, dan PHP.Visual Studio Code (VSCode): Editor kode sumber yang digunakan untuk menulis dan mengedit kode.Node.js: JavaScript runtime yang diperlukan untuk menjalankan alat-alat pengembangan frontend seperti Laravel Mix.
Instalasi PHP
Unduh dan instal PHP dari situs resmi PHP. Pastikan PHP ditambahkan ke path sistem operasi Anda.
Instalasi Composer
Unduh dan instal Composer dari situs resmi Composer. Setelah instalasi, pastikan Composer dapat diakses melalui terminal dengan mengetikkan perintah composer.
Instalasi XAMPP
Unduh dan instal XAMPP dari situs resmi XAMPP. XAMPP akan menyediakan server Apache dan MySQL yang diperlukan untuk proyek Laravel kita.
Instalasi VSCode
Unduh dan instal Visual Studio Code dari situs resmi VSCode.
Instalasi Node.js
Unduh dan instal Node.js dari situs resmi Node.js. Node.js diperlukan untuk mengelola dependensi frontend dan menjalankan Laravel Mix.
Mulai Membuat Proyek Sewa Mobil
Setelah semua alat diinstal, kita dapat mulai membuat proyek Laravel untuk sewa mobil. Proyek ini akan mencakup fitur katalog mobil, pencarian mobil, dan booking mobil.
Persiapan SQL untuk Desain Database
Sebelum membuat proyek Laravel, kita perlu merancang database untuk menyimpan data mobil, kategori mobil, transaksi booking, dan pengguna. Berikut adalah contoh struktur tabel yang diperlukan:
Table Mobilid (primary key)nama_mobilkategori_id (foreign key)harga_sewastatus (tersedia atau tidak)deskripsigambarTable Kategoriid (primary key)nama_kategoriTable Transaksiid (primary key)user_id (foreign key)mobil_id (foreign key)tanggal_sewatanggal_kembalitotal_hargaTable Usersid (primary key)namaemailpassword
Membuat Proyek Laravel Terbaru dengan Composer
Buka terminal dan navigasikan ke direktori tempat Anda ingin menyimpan proyek. Ketikkan perintah berikut untuk membuat proyek Laravel baru:
composer create-project --prefer-dist laravel/laravel rental_car_project
Mengatur .env dengan MySQL Database
Buka file .env yang ada di root proyek Laravel Anda dan sesuaikan pengaturan database seperti berikut:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=rental_car_db
DB_USERNAME=root
DB_PASSWORD=
Buat database baru dengan nama rental_car_db melalui phpMyAdmin atau tool database lain yang Anda gunakan.
Mengatur Migration Database Setiap Table Beserta Relationship
Untuk membuat database sewa mobil, kita akan membuat beberapa tabel: mobils, kategoris, transaksis, dan users. Setiap tabel akan memiliki kolom dan relasi yang diperlukan. Berikut adalah langkah-langkah untuk membuat masing-masing tabel dengan migration di Laravel.
Membuat Tabel mobils
Jalankan perintah berikut di terminal untuk membuat migration tabel mobils:
php artisan make:migration create_mobils_table
Edit file migration yang baru dibuat di database/migrations/xxxx_xx_xx_xxxxxx_create_mobils_table.php:
public function up()
{
Schema::create('mobils', function (Blueprint $table) {
$table->id();
$table->string('nama_mobil');
$table->unsignedBigInteger('kategori_id');
$table->decimal('harga_sewa', 10, 2);
$table->enum('status', ['tersedia', 'tidak tersedia']);
$table->text('deskripsi');
$table->string('gambar')->nullable();
$table->timestamps();
// Foreign key constraint
$table->foreign('kategori_id')->references('id')->on('kategoris')->onDelete('cascade');
});
}
Membuat Tabel kategoris
Jalankan perintah berikut di terminal untuk membuat migration tabel kategoris:
php artisan make:migration create_kategoris_table
Edit file migration yang baru dibuat di database/migrations/xxxx_xx_xx_xxxxxx_create_kategoris_table.php:
public function up()
{
Schema::create('kategoris', function (Blueprint $table) {
$table->id();
$table->string('nama_kategori');
$table->timestamps();
});
}
Membuat Tabel transaksis
Jalankan perintah berikut di terminal untuk membuat migration tabel transaksis:
php artisan make:migration create_transaksis_table
Edit file migration yang baru dibuat di database/migrations/xxxx_xx_xx_xxxxxx_create_transaksis_table.php:
public function up()
{
Schema::create('transaksis', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->unsignedBigInteger('mobil_id');
$table->date('tanggal_sewa');
$table->date('tanggal_kembali');
$table->decimal('total_harga', 10, 2);
$table->timestamps();
// Foreign key constraints
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->foreign('mobil_id')->references('id')->on('mobils')->onDelete('cascade');
});
}
Membuat Tabel users
Laravel secara default sudah menyediakan migration untuk tabel users. Namun, jika Anda ingin menyesuaikannya, Anda dapat mengedit file migration yang ada di database/migrations/xxxx_xx_xx_xxxxxx_create_users_table.php:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('nama');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
Migrasi Database
Setelah semua migration diatur, jalankan perintah berikut untuk menjalankan migration dan membuat tabel di database:
php artisan migrate
Relasi Antar Tabel
Relasi antar tabel sudah ditentukan di dalam migration dengan menggunakan foreign key. Tabel mobils memiliki relasi many-to-one dengan tabel kategoris, sedangkan tabel transaksis memiliki relasi many-to-one dengan tabel users dan mobils
Mengatur Model Fillable dan Controller Resource untuk CRUD
Buat model dan controller untuk setiap tabel dengan perintah berikut:
php artisan make:model Mobil -mcr
php artisan make:model Kategori -mcr
php artisan make:model Transaksi -mcr
php artisan make:model User -mcr
Tambahkan properti fillable di setiap model untuk mengizinkan mass assignment:
class Mobil extends Model
{
protected $fillable = [
'nama_mobil',
'kategori_id',
'harga_sewa',
'status',
'deskripsi',
'gambar',
];
}
Lakukan hal yang sama untuk model lainnya.
Mengatur Routing web.php dengan Middleware Login
Tambahkan routing untuk fitur CRUD di file routes/web.php dan pastikan menggunakan middleware auth untuk melindungi rute yang memerlukan login:
Route::group(['middleware' => ['auth']], function () {
Route::resource('mobils', MobilController::class);
Route::resource('kategoris', KategoriController::class);
Route::resource('transaksis', TransaksiController::class);
});
Membuat Fitur CRUD pada Setiap Table
Buat metode CRUD di setiap controller untuk mengelola data. Berikut adalah contoh metode store di MobilController:
public function store(Request $request)
{
$request->validate([
'nama_mobil' => 'required',
'kategori_id' => 'required',
'harga_sewa' => 'required',
'status' => 'required',
'deskripsi' => 'required',
'gambar' => 'required|image',
]);
$gambar = $request->file('gambar')->store('public/gambar');
Mobil::create([
'nama_mobil' => $request->nama_mobil,
'kategori_id' => $request->kategori_id,
'harga_sewa' => $request->harga_sewa,
'status' => $request->status,
'deskripsi' => $request->deskripsi,
'gambar' => $gambar,
]);
return redirect()->route('mobils.index')->with('success', 'Mobil berhasil ditambahkan');
}
Lakukan hal yang sama untuk metode lainnya seperti index, edit, update, dan destroy.
Membuat Fitur Checkout Mobil
Buat metode di TransaksiController untuk menangani proses checkout mobil. Contoh metode store untuk transaksi:
public function store(Request $request)
{
$request->validate([
'mobil_id' => 'required',
'tanggal_sewa' => 'required|date',
'tanggal_kembali' => 'required|date',
]);
$mobil = Mobil::find($request->mobil_id);
$total_harga = $mobil->harga_sewa * (strtotime($request->tanggal_kembali) - strtotime($request->tanggal_sewa)) / 86400;
Transaksi::create([
'user_id' => auth()->id(),
'mobil_id' => $request->mobil_id,
'tanggal_sewa' => $request->tanggal_sewa,
'tanggal_kembali' => $request->tanggal_kembali,
'total_harga' => $total_harga,
]);
return redirect()->route('transaksis.index')->with('success', 'Transaksi berhasil dilakukan');
}
Tambahan: Membuat CRUD dengan Cepat Menggunakan FilamentPHP
Membangun aplikasi CRUD secara manual di Laravel memang memberikan kontrol penuh atas setiap detail aplikasi, namun memerlukan waktu dan usaha yang cukup banyak. Untuk mempercepat proses ini, kita bisa memanfaatkan berbagai paket atau framework tambahan yang dirancang untuk menyederhanakan pembuatan aplikasi CRUD. Salah satu alat yang sangat membantu dalam konteks ini adalah FilamentPHP.
Apa itu FilamentPHP?
FilamentPHP adalah sebuah paket Laravel yang memungkinkan pengembang untuk membuat antarmuka administrasi (admin panel) dengan cepat dan mudah. Paket ini menyediakan berbagai fitur out-of-the-box yang dapat digunakan untuk membuat operasi CRUD (Create, Read, Update, Delete) dengan sedikit usaha. Dengan FilamentPHP, Anda dapat menghemat waktu dan fokus pada logika bisnis daripada berurusan dengan detail implementasi CRUD yang berulang.
Langkah-langkah Menggunakan FilamentPHP
Berikut adalah langkah-langkah untuk mengintegrasikan FilamentPHP ke dalam proyek Laravel Anda dan membuat fitur CRUD dengan cepat:
Instalasi FilamentPHP Pertama, tambahkan paket FilamentPHP ke dalam proyek Laravel Anda dengan menggunakan Composer: composer require filament/filamentMengkonfigurasi FilamentPHP Setelah instalasi, Anda perlu menjalankan perintah publish untuk mempublikasikan file konfigurasi FilamentPHP: php artisan vendor:publish --tag=filament-config File konfigurasi yang dipublikasikan akan memungkinkan Anda untuk menyesuaikan pengaturan Filament sesuai kebutuhan aplikasi Anda.Membuat Resource Filament Filament menggunakan konsep resource untuk mengelola model. Anda dapat membuat resource untuk model Mobil dengan perintah berikut: php artisan make:filament-resource Mobil Perintah ini akan menghasilkan beberapa file termasuk resource, model, dan migration jika belum ada. File resource akan berada di app/Filament/Resources/MobilResource.php.Menyesuaikan Resource Edit file resource yang telah dibuat untuk menyesuaikan tampilan dan operasi CRUD. Berikut adalah contoh penyesuaian sederhana pada Dalam file ini, kita mendefinisikan skema formulir untuk menambah atau mengedit mobil, serta kolom-kolom yang akan ditampilkan di tabel daftar mobil.
namespace App\\Filament\\Resources;
use App\\Filament\\Resources\\MobilResource\\Pages;
use App\\Models\\Mobil;
use Filament\\Resources\\Resource;
use Filament\\Resources\\Table;
use Filament\\Resources\\Form;
use Filament\\Tables\\Columns\\TextColumn;
use Filament\\Forms\\Components\\TextInput;
use Filament\\Forms\\Components\\Select;
use Filament\\Forms\\Components\\FileUpload;
class MobilResource extends Resource
{
protected static ?string $model = Mobil::class;
public static function form(Form $form): Form
{
return $form
->schema([
TextInput::make('nama_mobil')->required(),
Select::make('kategori_id')
->relationship('kategori', 'nama_kategori')->required(),
TextInput::make('harga_sewa')->required(),
Select::make('status')
->options([
'tersedia' => 'Tersedia',
'tidak tersedia' => 'Tidak Tersedia',
])->required(),
TextInput::make('deskripsi')->required(),
FileUpload::make('gambar')->image(),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
TextColumn::make('nama_mobil')->sortable()->searchable(),
TextColumn::make('kategori.nama_kategori')->sortable()->searchable(),
TextColumn::make('harga_sewa')->sortable(),
TextColumn::make('status')->sortable(),
])
->filters([
//
])
->actions([
Tables\\Actions\\EditAction::make(),
])
->bulkActions([
Tables\\Actions\\DeleteBulkAction::make(),
]);
}
public static function getPages(): array
{
return [
'index' => Pages\\ListMobils::route('/'),
'create' => Pages\\CreateMobil::route('/create'),
'edit' => Pages\\EditMobil::route('/{record}/edit'),
];
}
}
Menjalankan Server Setelah resource dikonfigurasi, jalankan server Laravel dengan perintah: php artisan serve Anda dapat mengakses panel administrasi Filament di URL /admin. Dari sini, Anda dapat mengelola data mobil dengan mudah melalui antarmuka yang disediakan Filament.
Keuntungan Menggunakan FilamentPHP
Kecepatan Pengembangan: Menggunakan FilamentPHP memungkinkan pengembang untuk membuat aplikasi CRUD dengan cepat tanpa harus menulis kode boilerplate berulang-ulang.Antarmuka Pengguna yang Intuitif: Filament menyediakan antarmuka administrasi yang mudah digunakan dan intuitif.Fleksibilitas: Meskipun Filament mengautomatisasi banyak hal, Anda tetap memiliki kontrol penuh untuk menyesuaikan setiap aspek sesuai kebutuhan aplikasi.
Dengan menggunakan FilamentPHP, Anda dapat fokus pada aspek bisnis dari aplikasi sewa mobil Anda, sementara Filament menangani detail teknis dari operasi CRUD. Hal ini akan sangat menghemat waktu dan usaha Anda dalam mengembangkan aplikasi yang handal dan efisien.
Penutup
Dalam tutorial ini, kita telah membahas langkah-langkah untuk membuat proyek CRUD sewa mobil menggunakan PHP Laravel 11. Mulai dari persiapan lingkungan pengembangan, desain database, pengaturan Laravel, hingga implementasi fitur CRUD dan checkout mobil. Dengan mengikuti langkah-langkah ini, Anda dapat membuat aplikasi sewa mobil yang fungsional dan membantu bisnis Anda menjangkau lebih banyak pelanggan secara online.
Jika Anda tertarik belajar dengan mentor maka bisa kunjungi katalog kelas BuildWithAngga dalam menciptakan portfolio menarik sebagai modal bekerja website developer di tahun 2025, sampai jumpa di kelas guys!