Back to Reports

Migration, Seeding, Routing, Model, Controller, View

Published on: 27 May 2026

Pendahuluan

Latar Belakang

Dalam pengembangan aplikasi web modern, penggunaan framework PHP seperti Laravel menjadi pilihan utama karena kemampuannya dalam menyediakan berbagai fitur yang memudahkan proses pembangunan aplikasi secara terstruktur dan efisien. Laravel menerapkan pola arsitektur MVC (Model View Controller) yang memisahkan logika bisnis, pengelolaan data, dan tampilan antarmuka sehingga kode program menjadi lebih modular dan mudah dipelihara. Selain itu, Laravel menyediakan berbagai fitur bawaan seperti migration untuk manajemen struktur database, seeding untuk pengisian data awal, routing untuk pengaturan URL aplikasi, Eloquent ORM untuk interaksi dengan database melalui model, controller sebagai penghubung antara model dan view, serta Blade Template Engine sebagai sistem templating yang fleksibel dan efisien.

Pemahaman terhadap seluruh komponen tersebut merupakan dasar yang sangat penting bagi seorang pengembang aplikasi web dalam membangun sistem yang berjalan secara terintegrasi. Dengan memanfaatkan migration, developer dapat mengelola versi struktur database tanpa harus melakukan perubahan secara manual melalui antarmuka database. Seeder memungkinkan pengisian data uji coba secara otomatis sehingga proses pengujian aplikasi menjadi lebih mudah. Routing mengatur bagaimana permintaan dari pengguna diteruskan ke controller yang sesuai, sedangkan model berperan sebagai representasi data yang terhubung langsung dengan tabel di database. View bertanggung jawab atas tampilan yang dilihat oleh pengguna, sementara controller mengatur alur logika antara model dan view.

Praktikum ini dilaksanakan sebagai bagian dari pemenuhan tugas pada mata kuliah Praktikum Pemrograman Web di Departemen Informatika, Fakultas Teknologi Informasi, Universitas Andalas. Melalui kegiatan ini, mahasiswa diharapkan dapat memahami dan mengimplementasikan seluruh komponen inti Laravel secara terpadu dalam membentuk aplikasi CRUD (Create, Read, Update, Delete) yang fungsional, sehingga memiliki dasar yang kuat untuk mempelajari pengembangan aplikasi web tingkat lanjut.

Rumusan Masalah

Rumusan masalah pada praktikum ini disusun berdasarkan implementasi komponen-komponen Laravel yang dipelajari. Berdasarkan modul dan percobaan yang dilakukan, rumusan masalah dalam praktikum ini dapat dijabarkan sebagai berikut:

  • Bagaimana cara melakukan konfigurasi koneksi database pada aplikasi Laravel melalui file .env.
  • Bagaimana cara membuat dan menjalankan migration untuk membentuk struktur tabel di database.
  • Bagaimana cara membuat seeder untuk mengisi data awal ke dalam tabel database.
  • Bagaimana cara mendefinisikan berbagai jenis routing pada Laravel meliputi routing dasar, routing parameter, named route, dan route group.
  • Bagaimana cara membuat model menggunakan Eloquent ORM untuk melakukan operasi CRUD pada database.
  • Bagaimana cara membuat controller dan menghubungkannya dengan route serta model.
  • Bagaimana cara membuat view menggunakan Blade Template Engine dan menampilkan data dari controller.
  • Bagaimana cara menggunakan fitur Blade Layout untuk membuat template tampilan yang dapat digunakan ulang pada banyak halaman.

Tujuan

Berdasarkan rumusan masalah yang telah dijabarkan, tujuan dari pelaksanaan praktikum ini adalah sebagai berikut:

  • Mahasiswa mampu melakukan konfigurasi koneksi database Laravel melalui file .env sesuai dengan pengaturan XAMPP yang digunakan.
  • Mahasiswa mampu membuat dan menjalankan migration untuk membentuk tabel pada database menggunakan perintah php artisan migrate.
  • Mahasiswa mampu membuat seeder dan menjalankannya untuk mengisi data awal ke dalam tabel database.
  • Mahasiswa mampu mendefinisikan berbagai jenis routing pada file routes/web.php meliputi routing dasar, routing parameter, named route, dan route group.
  • Mahasiswa mampu membuat model menggunakan Eloquent ORM dan melakukan operasi CRUD melalui model tersebut.
  • Mahasiswa mampu membuat controller, mendefinisikan method di dalamnya, dan menghubungkannya dengan route yang sesuai.
  • Mahasiswa mampu membuat view menggunakan Blade Template Engine dan menampilkan data yang dikirim dari controller.
  • Mahasiswa mampu membuat dan menggunakan Blade Layout sebagai template dasar halaman aplikasi web.

Langkah-Langkah Pengerjaan

Konfigurasi Database

Sebelum memulai pengerjaan, terlebih dahulu dilakukan pembuatan database dengan nama praktikum_laravel melalui phpMyAdmin yang dapat diakses melalui XAMPP. Kemudian dibuka file konfigurasi environment dengan nama .env yang berada pada direktori utama project Laravel. File ini berisi seluruh konfigurasi aplikasi termasuk koneksi database.

Pada bagian konfigurasi database, diubah nilai dari beberapa variabel environment agar sesuai dengan pengaturan MySQL yang digunakan, yaitu:

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

Migration

Migration merupakan fitur Laravel yang digunakan untuk membuat dan mengelola struktur database menggunakan kode program. Untuk membuat file migration tabel products, dijalankan perintah artisan pada terminal sebagai berikut:

php artisan make:migration create_products_table

Setelah perintah dijalankan, terbentuk sebuah file migration baru pada folder database/migrations. File tersebut dimodifikasi untuk mendefinisikan struktur tabel yang akan dibuat.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->integer('price');
            $table->text('description');
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};

Setelah file migration selesai dimodifikasi, dijalankan perintah eksekusi agar tabel terbentuk secara otomatis di dalam database.

php artisan migrate

Seeding

Untuk membuat file seeder, dijalankan perintah artisan berikut:

php artisan make:seeder ProductSeeder

File ProductSeeder.php kemudian diisi dengan data awal yang akan dimasukkan ke dalam tabel products.

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class ProductSeeder extends Seeder
{
    public function run(): void
    {
        DB::table('products')->insert([
            [
                'name'        => 'Laptop',
                'price'       => 7000000,
                'description' => 'Laptop untuk pemrograman',
                'created_at'  => now(),
                'updated_at'  => now(),
            ],
            [
                'name'        => 'Mouse',
                'price'       => 150000,
                'description' => 'Mouse wireless',
                'created_at'  => now(),
                'updated_at'  => now(),
            ]
        ]);
    }
}

Selanjutnya dilakukan pendaftaran seeder pada file DatabaseSeeder.php dan pengeksekusian dengan terminal.

// Pada DatabaseSeeder.php
$this->call(ProductSeeder::class);
php artisan db:seed

Routing

Seluruh definisi routing untuk antarmuka web berada pada file routes/web.php. Terdapat beberapa jenis routing yang dipelajari.

use Illuminate\Support\Facades\Route;

// Routing Dasar
Route::get('/', function () {
    return 'Selamat Datang di Laravel';
});

// Routing Parameter
Route::get('/produk/{id}', function ($id) {
    return 'Produk ID: ' . $id;
});

// Named Route
Route::get('/dashboard', function () {
    return 'Halaman Dashboard';
})->name('dashboard');

// Route Group
Route::prefix('admin')->group(function () {
    Route::get('/dashboard', function () {
        return 'Admin Dashboard';
    });
    Route::get('/products', function () {
        return 'Data Products';
    });
});

Model

Untuk membuat model Product, dijalankan perintah artisan berikut:

php artisan make:model Product

Di dalam class Product, ditambahkan properti $fillable untuk mencegah kerentanan mass assignment.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'price',
        'description'
    ];
}

Controller

Untuk membuat resource controller, dijalankan perintah artisan berikut:

php artisan make:controller ProductController --resource

Untuk menghubungkan resource controller dengan route, digunakan baris berikut pada web.php.

use App\Http\Controllers\ProductController;

Route::resource('products', ProductController::class);

Kemudian method index() pada controller dikembangkan agar mengambil data langsung dari database melalui model.

<?php

namespace App\Http\Controllers;

use App\Models\Product;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function index()
    {
        $products = Product::all();
        return view('products', compact('products'));
    }
}

View & Blade Layout

Dibuat file layout utama pada resources/views/layouts/app.blade.php.

<!DOCTYPE html>
<html>
<head>
    <title>@yield('title')</title>
</head>
<body>
    <h1>Aplikasi Laravel</h1>
    @yield('content')
</body>
</html>

View products.blade.php dimodifikasi untuk menggunakan layout tersebut.

@extends('layouts.app')

@section('title', 'Products')

@section('content')
    <ul>
        @foreach ($products as $product)
            <li>{{ $product->name }} - Rp. {{ $product->price }}</li>
        @endforeach
    </ul>
@endsection

Tugas Modul: CRUD Data Mahasiswa

Berdasarkan instruksi tugas yang terdapat pada modul praktikum, dilakukan pembuatan fitur CRUD (Create, Read, Update, Delete) secara lengkap untuk entitas Mahasiswa. Implementasi ini mencakup pembuatan Migration, Seeding, Model, Route, Controller, dan View.

1. Migration Tabel Mahasiswa

Langkah pertama adalah mengeksekusi perintah php artisan make:migration create_mahasiswas_table pada terminal. Pada file migration yang dihasilkan, method up() dilengkapi dengan struktur tabel mahasiswa meliputi nim, nama, email, jurusan, dan angkatan.

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('mahasiswas', function (Blueprint $table) {
            $table->id();
            $table->string('nim')->unique();
            $table->string('nama');
            $table->string('email')->unique();
            $table->string('jurusan');
            $table->integer('angkatan');
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('mahasiswas');
    }
};

Setelah file selesai, struktur tersebut diaplikasikan ke database dengan perintah php artisan migrate.

2. Seeding Data Mahasiswa

Agar aplikasi memiliki data awal, dibuat sebuah seeder dengan perintah php artisan make:seeder MahasiswaSeeder. File tersebut kemudian diisi dengan beberapa data *dummy* menggunakan Query Builder.

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;

class MahasiswaSeeder extends Seeder
{
    public function run(): void
    {
        DB::table('mahasiswas')->insert([
            [
                'nim' => '2411531006',
                'nama' => 'Daffa Aira Adrin',
                'email' => 'daffa@unand.ac.id',
                'jurusan' => 'Informatika',
                'angkatan' => 2024,
                'created_at' => now(),
                'updated_at' => now(),
            ],
            [
                'nim' => '2411531007',
                'nama' => 'Habibi',
                'email' => 'habibi@unand.ac.id',
                'jurusan' => 'Sistem Informasi',
                'angkatan' => 2024,
                'created_at' => now(),
                'updated_at' => now(),
            ],
            [
                'nim' => '2411531008',
                'nama' => 'Budi',
                'email' => 'budi@unand.ac.id',
                'jurusan' => 'Teknik Komputer',
                'angkatan' => 2024,
                'created_at' => now(),
                'updated_at' => now(),
            ]
        ]);
    }
}

Pemanggilan seeder ditambahkan pada DatabaseSeeder.php dengan perintah $this->call(MahasiswaSeeder::class); lalu di eksekusi menggunakan php artisan db:seed.

3. Model Mahasiswa

Pembuatan model dilakukan dengan menjalankan perintah php artisan make:model Mahasiswa. Agar data dapat dimasukkan melalui formulir tanpa memicu error keamanan *mass assignment*, didefinisikan properti $fillable di dalam file model Mahasiswa.php.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Mahasiswa extends Model
{
    use HasFactory;

    protected $fillable = [
        'nim',
        'nama',
        'email',
        'jurusan',
        'angkatan',
    ];
}

4. Controller dan Routing

Dibuat sebuah resource controller menggunakan perintah php artisan make:controller MahasiswaController --resource. Pada file routes/web.php, ditambahkan registrasi *resource route* agar seluruh fungsi CRUD langsung terhubung secara otomatis ke controller.

// Pada file routes/web.php
use App\Http\Controllers\MahasiswaController;

Route::resource('mahasiswas', MahasiswaController::class);

File MahasiswaController.php kemudian disusun logika bisnisnya mulai dari menampilkan data (index), menangani validasi input penambahan (store), mengubah data (update), hingga menghapus (destroy).

<?php

namespace App\Http\Controllers;

use App\Models\Mahasiswa;
use Illuminate\Http\Request;

class MahasiswaController extends Controller
{
    public function index()
    {
        $mahasiswas = Mahasiswa::all();
        return view('mahasiswas.index', compact('mahasiswas'));
    }

    public function create()
    {
        return view('mahasiswas.create');
    }

    public function store(Request $request)
    {
        $request->validate([
            'nim' => 'required|unique:mahasiswas',
            'nama' => 'required',
            'email' => 'required|email|unique:mahasiswas',
            'jurusan' => 'required',
            'angkatan' => 'required|integer',
        ]);

        Mahasiswa::create($request->all());
        return redirect()->route('mahasiswas.index')
                         ->with('success', 'Data mahasiswa berhasil ditambahkan.');
    }

    public function edit(Mahasiswa $mahasiswa)
    {
        return view('mahasiswas.edit', compact('mahasiswa'));
    }

    public function update(Request $request, Mahasiswa $mahasiswa)
    {
        $request->validate([
            'nim' => 'required|unique:mahasiswas,nim,' . $mahasiswa->id,
            'nama' => 'required',
            'email' => 'required|email|unique:mahasiswas,email,' . $mahasiswa->id,
            'jurusan' => 'required',
            'angkatan' => 'required|integer',
        ]);

        $mahasiswa->update($request->all());
        return redirect()->route('mahasiswas.index')
                         ->with('success', 'Data mahasiswa berhasil diperbarui.');
    }

    public function destroy(Mahasiswa $mahasiswa)
    {
        $mahasiswa->delete();
        return redirect()->route('mahasiswas.index')
                         ->with('success', 'Data mahasiswa berhasil dihapus.');
    }
}

5. View untuk Mahasiswa

Di dalam folder resources/views/mahasiswas, dibuat tiga file Blade utama untuk mengakomodasi tampilan antarmuka kepada pengguna.

A. File index.blade.php digunakan untuk menampilkan tabel dari keseluruhan data mahasiswa.

@extends('layouts.app')
@section('title', 'Data Mahasiswa')

@section('content')
    <h2>Daftar Mahasiswa</h2>
    <a href="{{ route('mahasiswas.create') }}">+ Tambah Mahasiswa</a>

    @if (session('success'))
        <div>{{ session('success') }}</div>
    @endif

    <table border="1" cellpadding="10" cellspacing="0" style="margin-top: 15px; width: 100%;">
        <thead>
            <tr>
                <th>No</th>
                <th>NIM</th>
                <th>Nama</th>
                <th>Email</th>
                <th>Jurusan</th>
                <th>Angkatan</th>
                <th>Aksi</th>
            </tr>
        </thead>
        <tbody>
            @foreach ($mahasiswas as $index => $mhs)
            <tr>
                <td>{{ $index + 1 }}</td>
                <td>{{ $mhs->nim }}</td>
                <td>{{ $mhs->nama }}</td>
                <td>{{ $mhs->email }}</td>
                <td>{{ $mhs->jurusan }}</td>
                <td>{{ $mhs->angkatan }}</td>
                <td>
                    <a href="{{ route('mahasiswas.edit', $mhs->id) }}">Edit</a> | 
                    <form action="{{ route('mahasiswas.destroy', $mhs->id) }}" method="POST" style="display:inline;">
                        @csrf
                        @method('DELETE')
                        <button type="submit" onclick="return confirm('Apakah yakin menghapus data ini?')">Hapus</button>
                    </form>
                </td>
            </tr>
            @endforeach
        </tbody>
    </table>
@endsection

B. File create.blade.php dirancang sebagai formulir untuk menambahkan entitas mahasiswa baru ke dalam sistem.

@extends('layouts.app')
@section('title', 'Tambah Mahasiswa')

@section('content')
    <h2>Tambah Data Mahasiswa</h2>
    <form action="{{ route('mahasiswas.store') }}" method="POST">
        @csrf
        <div>
            <label>NIM:</label><br>
            <input type="text" name="nim" required>
        </div><br>
        <div>
            <label>Nama:</label><br>
            <input type="text" name="nama" required>
        </div><br>
        <div>
            <label>Email:</label><br>
            <input type="email" name="email" required>
        </div><br>
        <div>
            <label>Jurusan:</label><br>
            <input type="text" name="jurusan" required>
        </div><br>
        <div>
            <label>Angkatan:</label><br>
            <input type="number" name="angkatan" required>
        </div><br>
        <button type="submit">Simpan</button>
        <a href="{{ route('mahasiswas.index') }}">Kembali</a>
    </form>
@endsection

C. File edit.blade.php diimplementasikan untuk menangani perubahan atau pembaharuan data mahasiswa yang sudah ada di database.

@extends('layouts.app')
@section('title', 'Edit Mahasiswa')

@section('content')
    <h2>Edit Data Mahasiswa</h2>
    <form action="{{ route('mahasiswas.update', $mahasiswa->id) }}" method="POST">
        @csrf
        @method('PUT')
        <div>
            <label>NIM:</label><br>
            <input type="text" name="nim" value="{{ $mahasiswa->nim }}" required>
        </div><br>
        <div>
            <label>Nama:</label><br>
            <input type="text" name="nama" value="{{ $mahasiswa->nama }}" required>
        </div><br>
        <div>
            <label>Email:</label><br>
            <input type="email" name="email" value="{{ $mahasiswa->email }}" required>
        </div><br>
        <div>
            <label>Jurusan:</label><br>
            <input type="text" name="jurusan" value="{{ $mahasiswa->jurusan }}" required>
        </div><br>
        <div>
            <label>Angkatan:</label><br>
            <input type="number" name="angkatan" value="{{ $mahasiswa->angkatan }}" required>
        </div><br>
        <button type="submit">Perbarui Data</button>
        <a href="{{ route('mahasiswas.index') }}">Batal</a>
    </form>
@endsection

Kesimpulan

Berdasarkan praktikum yang telah dilaksanakan, konfigurasi database pada Laravel dilakukan melalui file .env dengan mengatur variabel DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, dan DB_PASSWORD sesuai dengan pengaturan server MySQL yang digunakan. Konfigurasi ini menjadi dasar dari seluruh interaksi antara aplikasi dengan database.

Migration merupakan fitur Laravel yang digunakan untuk membuat dan mengelola struktur database melalui kode program. File migration mendefinisikan skema tabel di dalam method up() dan operasi pembalikan di dalam method down(). Migration dijalankan menggunakan perintah php artisan migrate, dapat dibatalkan dengan migrate:rollback, dan diulang dari awal dengan migrate:fresh.

Seeding digunakan untuk mengisi data awal ke dalam tabel database secara otomatis. Seeder dibuat menggunakan perintah php artisan make:seeder, didaftarkan pada DatabaseSeeder, dan dieksekusi dengan php artisan db:seed.

Routing pada Laravel digunakan untuk menentukan URL beserta respons yang diberikan aplikasi. Terdapat berbagai jenis routing yang dapat didefinisikan pada file routes/web.php, meliputi routing dasar untuk URL statis, routing parameter untuk menangkap nilai dinamis dari URL, named route untuk memberikan nama pada route, dan route group untuk mengelompokkan route yang memiliki prefix yang sama.

Model pada Laravel menggunakan Eloquent ORM yang memungkinkan operasi CRUD database dilakukan menggunakan sintaks PHP yang bersih. Properti $fillable pada model digunakan untuk mendefinisikan kolom yang diizinkan untuk diisi secara massal guna mencegah kerentanan keamanan. Controller berperan sebagai penghubung antara model, view, dan request pengguna. Setiap method di dalam controller bertanggung jawab menangani sebuah aksi tertentu. Resource controller menyediakan tujuh method standar CRUD secara otomatis dan dapat dihubungkan dengan route menggunakan Route::resource().

View pada Laravel menggunakan Blade Template Engine yang menyediakan directive seperti @foreach untuk perulangan data dan {{ }} untuk menampilkan nilai variabel secara aman. Fitur Blade Layout memungkinkan pembuatan template yang dapat digunakan ulang pada banyak halaman sehingga kode tampilan menjadi lebih efisien, terstruktur, dan mudah dipelihara.

Repository Praktikum

Kode sumber dan file konfigurasi dari praktikum ini dapat diakses pada repositori GitHub berikut:

https://github.com/DaffaAiraAdrn/PemogramanWeb_2411531006/tree/main