Inventaris Lab Laravel 12 : Bagian #02 - KONFIGURASI DATABASE & FONDASI PROYEK
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.
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.
- 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
Langkah pertama adalah memberitahu Laravel cara terhubung ke database siminlab yang sudah kita buat.
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:
php artisan make:model Category -msr
File yang Dibuat:
php artisan make:model Item -msr
File yang Dibuat:
php artisan make:model Loan -msr
File yang Dibuat:
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.
Sekarang saatnya kita mendefinisikan kolom-kolom untuk setiap tabel di dalam file migration-nya, sesuai dengan rancangan yang sudah diperbarui.
// ... 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();
});
// ... di dalam method up()
Schema::create('categories', function (Blueprint $table) {
$table->id();
$table->string('name')->unique();
$table->timestamps();
});
// ... 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();
});
// ... 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();
});
Setelah semua "cetakan biru" tabel siap, saatnya kita membangunnya di database.
php artisan migrate:fresh
Setelah langkah ini, fondasi teknis dari aplikasi kita sudah berdiri kokoh. Selanjutnya, kita akan siap untuk 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.
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.
php artisan make:seeder UserSeeder
Sekarang setelah filenya ada, kita akan membuat dua pengguna awal: satu sebagai admin dan satu sebagai siswa.
<?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.
Sekarang kita isi beberapa kategori barang sebagai data awal.
<?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.
File seeder yang sudah kita buat tidak akan berjalan jika tidak "dipanggil" oleh file utamanya.
<?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."
Setelah semua seeder siap dan terdaftar, saatnya mengeksekusinya.
php artisan db:seed
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
Mahardika Oktadiansyah - 15 Juli 2025
Belajar CSS Lanjutan #395 | CSS padding-inline Property
Mahardika Oktadiansyah - 15 Juli 2025
Belajar CSS Lanjutan #394 | CSS padding-bottom Property
Mahardika Oktadiansyah - 15 Juli 2025
Belajar CSS Lanjutan #393 | CSS padding-block-start Property