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:

  1. PHP: Bahasa pemrograman yang digunakan untuk pengembangan Laravel.
  2. Composer: Manajer dependensi untuk PHP.
  3. XAMPP: Paket perangkat lunak yang mencakup Apache, MySQL, dan PHP.
  4. Visual Studio Code (VSCode): Editor kode sumber yang digunakan untuk menulis dan mengedit kode.
  5. 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:

  1. Table Mobil
    • id (primary key)
    • nama_mobil
    • kategori_id (foreign key)
    • harga_sewa
    • status (tersedia atau tidak)
    • deskripsi
    • gambar
  2. Table Kategori
    • id (primary key)
    • nama_kategori
  3. Table Transaksi
    • id (primary key)
    • user_id (foreign key)
    • mobil_id (foreign key)
    • tanggal_sewa
    • tanggal_kembali
    • total_harga
  4. Table Users
    • id (primary key)
    • nama
    • email
    • password

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:

  1. Instalasi FilamentPHP Pertama, tambahkan paket FilamentPHP ke dalam proyek Laravel Anda dengan menggunakan Composer: composer require filament/filament
  2. Mengkonfigurasi 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.
  3. 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.
  4. 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'),
        ];
    }
}
  1. 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!