Inventaris Lab Laravel 12 : Bagian #02 - KONFIGURASI DATABASE & FONDASI PROYEK — Minarsih TECH Install Web App

Inventaris Lab Laravel 12 : Bagian #02 - KONFIGURASI DATABASE & FONDASI PROYEK

profil-penulis

Belajar Bareng Minarsih - Edisi Ngoding

08 Oktober 2025

Setelah berhasil menyiapkan "dapur" kita (server Laragon & VS Code), sekarang saatnya kita mulai "memasak". Di bagian ini, kita akan fokus menghubungkan proyek Laravel kita ke database, membangun "cetakan biru" tabel-tabelnya dengan Migrations, dan menyiapkan file-file utama (Model, Seeder, Controller) yang akan menjadi otak dari aplikasi kita.

Semua aktivitas coding dan pengetikan perintah akan kita lakukan terpusat di Visual Studio Code.

 

Alur Cerita dan Struktur Database Proyek SIMINLAB

Sebelum kita menulis kode, mari kita pahami kembali alur cerita dan struktur detail dari setiap tabel yang akan kita bangun. Ini adalah cetak biru database kita.

  • Tabel users:
    Menyimpan data pengguna, yaitu Siswa dan Admin. Peran (role) mereka akan membedakan hak akses di dalam aplikasi.


- id: BIGINT, Primary Key, Auto Increment

- name: VARCHAR(255)

- email: VARCHAR(255), Unique

- password: VARCHAR(255)

- role: ENUM('Admin', 'Siswa'), Default: 'siswa'

- timestamps: created_at, updated_at
 

  • Tabel categories:
    Berfungsi untuk mengelompokkan barang agar lebih rapi. Misalnya, 'Mouse', 'Keyboard', atau 'Kabel'.

    - id: BIGINT, Primary Key, Auto Increment
    - name: VARCHAR(255), Unique
    - timestamps: created_at, updated_at
     
  • Tabel items:
    Ini adalah tabel inti yang berisi daftar semua barang inventaris. Setiap barang akan memiliki kolom untuk kondisi fisik dan nama file fotonya.

    - id: BIGINT, Primary Key, Auto Increment
    - category_id: BIGINT, Foreign Key (ke tabel categories)
    - name: VARCHAR(255)
    - photo: VARCHAR(255), Nullable
    - unique_code: VARCHAR(255), Unique, Nullable
    - condition: ENUM('Baik', 'Rusak'), Default: 'Baik'
    - timestamps: created_at, updated_at
     
  • Tabel loans:
    Bertindak sebagai "buku catatan digital" yang merekam setiap transaksi peminjaman. Status "Dipinjam" atau "Dikembalikan" hanya ada di sini.

    - id: BIGINT, Primary Key, Auto Increment
    - user_id: BIGINT, Foreign Key (ke tabel users)
    - item_id: BIGINT, Foreign Key (ke tabel items)
    - loan_date: TIMESTAMP
    - return_date: TIMESTAMP, Nullable
    - actual_return_date: TIMESTAMP, Nullable
    - status: ENUM('Dipinjam', 'Dikembalikan'), Default: 'Dipinjam'
    - timestamps: created_at, updated_at

 

Langkah 1: Konfigurasi Koneksi Database di File .env

Langkah pertama adalah memberitahu Laravel cara terhubung ke database siminlab yang sudah kita buat.

  1. Di VS Code, buka file bernama .env.


     
  2. Cari bagian DB_CONNECTION dan ubah atau cek konfigurasi databasenya seperti di bawah ini.

    Cuplikan kode

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=siminlab
    DB_USERNAME=root
    DB_PASSWORD=


     
  3. Simpan file .env tersebut.

Langkah 2: Membuat Model, Migration, Seeder, & Controller

Sekarang kita akan membuat semua file "pondasi" yang kita butuhkan untuk setiap tabel dengan satu perintah sakti dari Artisan. Perintah php artisan make:model NamaModel -msr akan membuat 4 file sekaligus:

  • Model: Berinteraksi dengan tabel di database.
  • -m: Flag tambahan untuk membuat file migration.
  • Seeder: Mengisi data awal ke tabel.
  • Resource Controller: Mengatur logika dan alur data dengan fungsi atau method dasar yang otomatis dibuat seperti (index, create, store, show, edit, update, destroy).

A. Untuk Tabel categories
 

php artisan make:model Category -msr


File yang Dibuat:

  • Model: app/Models/Category.php
  • Migration: database/migrations/xxxx_xx_xx_xxxxxx_create_categories_table.php
  • Seeder: database/seeders/CategorySeeder.php
  • Resource Controller: app/Http/Controllers/CategoryController.php

B. Untuk Tabel items
 

php artisan make:model Item -msr


File yang Dibuat:

  • Model: app/Models/Item.php
  • Migration: database/migrations/xxxx_xx_xx_xxxxxx_create_items_table.php
  • Seeder: database/seeders/ItemSeeder.php
  • Resource Controller: app/Http/Controllers/ItemController.php

C. Untuk Tabel loans
 

php artisan make:model Loan -msr


File yang Dibuat:

  • Model: app/Models/Loan.php
  • Migration: database/migrations/xxxx_xx_xx_xxxxxx_create_loans_table.php
  • Seeder: database/seeders/LoanSeeder.php
  • Resource Controller: app/Http/Controllers/LoanController.php

PENTING! Kenapa kita tidak membuat migration untuk users? Karena saat kita menginstal Laravel, file migration untuk tabel users sudah disediakan secara otomatis. Kita hanya perlu memodifikasinya.

Langkah 3: Mengedit Struktur Tabel di File Migration

Sekarang saatnya kita mendefinisikan kolom-kolom untuk setiap tabel di dalam file migration-nya, sesuai dengan rancangan yang sudah diperbarui.

A. Tabel users

  1. Buka file migration: database/migrations/xxxx_create_users_table.php.


     
  2. Tambahkan kolom role.
     
    // ... di dalam method up()
    Schema::create('users', function (Blueprint $table) {
    
        // ... kolom lain
    
        $table->enum('role', ['Admin', 'Siswa'])->default('siswa'); // Tambahkan ini
    
        $table->rememberToken();
    
        $table->timestamps();
    
    });

B. Tabel categories

  1. Buka file migration: database/migrations/xxxx_create_categories_table.php.


     
  2. Isi method up().
     
    // ... di dalam method up()
    Schema::create('categories', function (Blueprint $table) {
    
        $table->id();
    
        $table->string('name')->unique();
    
        $table->timestamps();
    
    });

 

C. Tabel items

  1. Buka file migration: database/migrations/xxxx_create_items_table.php.


     
  2. Isi method up().
     
    // ... di dalam method up()
    Schema::create('items', function (Blueprint $table) {
    
        $table->id();
    
        $table->foreignId('category_id')->constrained()->onDelete('cascade');
    
        $table->string('name');
    
        $table->string('photo')->nullable();
    
        $table->string('unique_code')->unique()->nullable();
    
        $table->enum('condition', ['Baik', 'Rusak'])->default('Baik');
    
        $table->timestamps();
    
    });

D. Tabel loans

  1. Buka file migration: database/migrations/xxxx_create_loans_table.php.


     
  2. Isi method up()-nya. Strukturnya tetap sama seperti sebelumnya.
     
    // ... di dalam method up()
    Schema::create('loans', function (Blueprint $table) {
    
        $table->id();
    
        $table->foreignId('user_id')->constrained()->onDelete('cascade');
    
        $table->foreignId('item_id')->constrained()->onDelete('cascade');
    
        $table->timestamp('loan_date');
    
        $table->timestamp('return_date')->nullable();
    
        $table->timestamp('actual_return_date')->nullable();
    
        $table->enum('status', ['Dipinjam', 'Dikembalikan'])->default('Dipinjam');
    
        $table->timestamps();
    
    });

Langkah 4: Menjalankan Migrasi & Verifikasi

Setelah semua "cetakan biru" tabel siap, saatnya kita membangunnya di database.

  1. Kembali ke terminal VS Code.
  2. Jalankan perintah berikut, untuk melakukan refresh pada database, hal ini dilakukan untuk membersihkan kembali database agar perubahan struktur tabel yang kita buat dapat diterapkan:
     
    php artisan migrate:fresh


     
  3. Verifikasi: Buka phpMyAdmin atau HeidiSQL. Buka database siminlab dan Anda akan melihat semua tabel sudah berhasil dibuat sesuai dengan struktur baru yang kita definisikan.


     

Setelah langkah ini, fondasi teknis dari aplikasi kita sudah berdiri kokoh. Selanjutnya, kita akan siap untuk mengisi data awal dengan Seeder.

Langkah 5: Mengisi Data Awal dengan Seeder

Jika Migration adalah proses membuat "rak buku" yang kosong, maka Seeder adalah proses "mengisi buku-buku" pertama ke dalam rak tersebut. Seeder sangat berguna untuk menyiapkan data awal yang dibutuhkan aplikasi, seperti akun admin, daftar kategori, atau data contoh lainnya.

A. Membuat File UserSeeder

File Seeder untuk Category, Item, dan Loan sudah dibuatkan secara otomatis. Namun, karena kita tidak membuat Model User (sudah ada), kita perlu membuat file UserSeeder secara terpisah.

  1. Buka terminal di VS Code.
  2. Jalankan perintah Artisan berikut untuk membuat file seeder saja:
     
    php artisan make:seeder UserSeeder


     
  3. Perintah ini akan membuat file baru di lokasi: database/seeders/UserSeeder.php.

 

B. Mengisi Logika UserSeeder

Sekarang setelah filenya ada, kita akan membuat dua pengguna awal: satu sebagai admin dan satu sebagai siswa.

  1. Buka file database/seeders/UserSeeder.php.


     
  2. Kita perlu mengimpor Model User dan Hash untuk enkripsi password.
  3. Isi method run() dengan kode di bawah ini.
     
    <?php
    
    
    namespace Database\Seeders;
    
    
    
    use App\Models\User;
    
    use Illuminate\Database\Seeder;
    
    use Illuminate\Support\Facades\Hash; // Import Hash
    
    
    
    class UserSeeder extends Seeder
    
    {
    
        /**
    
         * Run the database seeds.
    
         */
    
        public function run(): void
    
        {
    
            User::create([
    
                'name' => 'Admin SIMINLAB',
    
                'email' => 'admin@smkn2-mjk.sch.id',
    
                'password' => Hash::make('admin'), // Enkripsi password
    
                'role' => 'Admin',
    
            ]);
    
    
    
            User::create([
    
                'name' => 'Siswa Contoh',
    
                'email' => 'siswa@smkn2-mjk.sch.id',
    
                'password' => Hash::make('siswa'),
    
                'role' => 'Siswa',
    
            ]);
    
        }
    
    }




    Catatan: Menggunakan Hash::make() adalah praktik keamanan yang wajib untuk melindungi password pengguna.

C. Mengisi Logika CategorySeeder

Sekarang kita isi beberapa kategori barang sebagai data awal.

  1. Buka file database/seeders/CategorySeeder.php.


     
  2. Isi method run() dengan data kategori yang kita inginkan.
     
    <?php
    
    
    namespace Database\Seeders;
    
    
    
    use App\Models\Category; // Import Category
    
    use Illuminate\Database\Seeder;
    
    
    
    class CategorySeeder extends Seeder
    
    {
    
        /**
    
         * Run the database seeds.
    
         */
    
        public function run(): void
    
        {
    
            Category::insert([
    
                ['name' => 'Mouse'],
    
                ['name' => 'Keyboard'],
    
                ['name' => 'Kabel Jaringan'],
    
                ['name' => 'Monitor'],
    
                ['name' => 'Proyektor'],
    
            ]);
    
        }
    
    }


    Tips: Menggunakan insert() untuk banyak data sekaligus lebih efisien daripada memanggil create() berulang kali.
     

D. (PENTING) Mendaftarkan Seeder di DatabaseSeeder.php

File seeder yang sudah kita buat tidak akan berjalan jika tidak "dipanggil" oleh file utamanya.

  1. Buka file database/seeders/DatabaseSeeder.php.


     
  2. Di dalam method run(), panggil kelas Seeder yang sudah kita buat tadi menggunakan $this->call().
     
    <?php
    
    
    namespace Database\Seeders;
    
    
    
    use Illuminate\Database\Seeder;
    
    
    
    class DatabaseSeeder extends Seeder
    
    {
    
        /**
    
         * Seed the application's database.
    
         */
    
        public function run(): void
    
        {
    
            $this->call([
    
                UserSeeder::class,
    
                CategorySeeder::class,
    
            ]);
    
        }
    
    }




    Langkah ini memberitahu Laravel: "Saat proses seeding dijalankan, tolong eksekusi UserSeeder dan CategorySeeder."

E. Menjalankan Seeder & Verifikasi

Setelah semua seeder siap dan terdaftar, saatnya mengeksekusinya.

  1. Kembali ke terminal VS Code.
  2. Jalankan perintah db:seed:
     
    php artisan db:seed


     
  3. Anda akan melihat pesan konfirmasi bahwa seeding telah berjalan dengan sukses.
  4. Verifikasi: Buka kembali phpMyAdmin atau HeidiSQL.
    • Buka tabel users, Anda akan melihat 2 data pengguna (Admin & Siswa) sudah terisi.


       
    • Buka tabel categories, Anda akan melihat 5 kategori barang juga sudah masuk.


       

Selamat! Anda telah berhasil membangun struktur database dan mengisinya dengan data awal. Fondasi aplikasi kita sudah benar-benar siap untuk dikembangkan lebih lanjut dengan membuat tampilan (view) dan logika di controller.

Sedikit Pembahasan: Saat ini kita tidak melakukan pengisian data pada Seeder Item dan Loan, karena sebenarnya yang paling penting kita sudah menyiapkan data pada tabel utama atau parent yaitu pada seeder Users dan Category. Nantinya Anda bisa melakukan pengisian Seeder Item dan Loan sendiri ketika memang diperlukan atau ketika Anda ingin menerapkan pemahan dari apa yang sudah dipelajari dari materi Seeder ini.

Artikel Lainnya Dengan Kategori Terkait :


1. Inventaris Lab Laravel 12 : Bagian #01 - INSTALASI LARAGON, PHP, PHPMYADMIN & LARAVEL

2. Inventaris Lab Laravel 12 : Bagian #02 - KONFIGURASI DATABASE & FONDASI PROYEK

3. Inventaris Lab Laravel 12 : Bagian #03 - MEMBANGUN HALAMAN ADMIN DENGAN BLADE TEMPLATING

4. Inventaris Lab Laravel 12 : Bagian #04 - MEMBUAT HALAMAN DASHBOARD DINAMIS

5. Inventaris Lab Laravel 12 : Bagian #05 - MEMBUAT HALAMAN CRUD USERS

6. Inventaris Lab Laravel 12 : Bagian #06 - MEMBUAT FITUR AUTENTIKASI (LOGIN) & PENYESUAIAN UI

7. Inventaris Lab Laravel 12 : Bagian #07 - MEMBUAT HALAMAN CRUD CATEGORY

8. Inventaris Lab Laravel 12 : Bagian #08 - MEMBUAT HALAMAN CRUD ITEM

9. Inventaris Lab Laravel 12 : Bagian #09 - MEMBUAT HALAMAN TRANSAKSI PEMINJAMAN (LOAN)

10. Inventaris Lab Laravel 12 : Bagian #10 - HAK AKSES (AUTHORIZATION) & HALAMAN SISWA

Masuk Terlebih dahulu untuk berkomentar

Paling baru
Lihat Lainnya