Subbab 10 / 10

LARAVEL - MIGRATION, SEEDING, MODEL


1. Analogi Migration, seeder, model

Migration, Seeder, dan Model adalah tiga komponen Laravel yang bekerja sama mengelola database. Agar mudah dibayangkan, mari kita analogikan ketika konsep tersebut menjadi sebuah gedung arsip.

Ketiganya menjawab tiga pertanyaan dasar berikut:


  1. Di mana data akan disimpan, dan seperti apa bentuk rak-raknya? Jawabannya adalah Migration.
  2. Bagaimana agar rak-rak itu tidak kosong saat pertama dibuka? Jawabannya adalah Seeder.
  3. Bagaimana kode PHP kita bisa mengambil dan menyimpan data dengan nyaman? Jawabannya adalah Model.

konsep laravel

peran

tugas

Database

Gedung arsip

tempat semua data disimpan

Migration

Denah rak penyimpanan

Menentukan rak (tabel) apa saja yang ada dan sekat (kolom) di tiap rak

Seeder

Pengisi rak pertama

mengisi berkas awal supaya gedung tidak kosong ketika dibuka

Model

Petugas arsip (penerjemah)

Kamu cukup bilang "carikan data mahasiswa angkatan 2023", petugas yang berjalan ke rak

MIGRATION

Migrasi adalah alat yang kuat dalam Laravel yang memungkinkan kita untuk mengelola perubahan pada struktur basis data secara terstruktur. kita bisa membuat, mengubah, dan menghapus tabel serta kolom dengan mudah menggunakan migrasi. Setiap migrasi direpresentasikan sebagai file PHP yang mencatat perubahan basis data.


Dalam migration Laravel:

  • up(): Menjalankan perubahan pada database, misalnya membuat tabel baru, menambahkan kolom, atau mengubah struktur tabel.
  • down(): Membatalkan perubahan yang dilakukan oleh up(), misalnya menghapus tabel atau mengembalikan struktur tabel ke kondisi sebelumnya.


1. membuat migration baru

Kita bisa membuat file migration baru dengan menjalankan perintah berikut pada terminal:

php
1
php artisan make:migration NamaMigrasi

Setelah migrasi dibuat, kita bisa mendefinisikan perubahan yang ingin kita lakukan pada struktur basis data, seperti membuat tabel baru, menambahkan kolom, atau mengubah indeks.

2. contoh file migration

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

public function up(): void
{
    Schema::create('mahasiswas', function (Blueprint $table) {
        $table->id();
        $table->string('nama');
        $table->string('nim')->unique();
        $table->timestamps();
    });
}

public function down(): void
{
    Schema::dropIfExists('mahasiswas');
}
  • id(): Membuat primary key otomatis.
  • string('nama'): Menyimpan nama mahasiswa.
  • string('nim')->unique(): Menyimpan NIM yang tidak boleh duplikat.
  • timestamps(): Menambahkan kolom created_at dan updated_at.
  • dropIfExists(): Menghapus tabel ketika migration dibatalkan.

3. perintah - perintah migration

  1. php artisan migrate: Menjalankan migration yang belum diterapkan.
  2. php artisan migrate:status: Menampilkan status migration.
  3. php artisan migrate:rollback: Membatalkan batch migration terakhir.
  4. php artisan migrate:rollback --step=2: Membatalkan dua migration terakhir.
  5. php artisan migrate:reset: Membatalkan seluruh migration.
  6. php artisan migrate:refresh: Membatalkan seluruh migration, lalu menjalankannya kembali.
  7. php artisan migrate:fresh: Menghapus semua tabel, lalu menjalankan seluruh migration dari awal.


SEEDER

Seeder adalah alat yang memungkinkan kita untuk mengisi data awal dalam tabel basis data. Ini sangat berguna ketika kita ingin memiliki data contoh atau data awal yang konsisten di seluruh pengembangan atau produksi.

1. membuat file seeder

kita dapat membuat file seeder dengan perintah berikut:

php
1
php artisan make:seeder NamaSeeder

2. contoh file seeder

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

<?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([
            [
                'nama' => 'adya',
                'nim' => '101',
            ],
            [
                'nama' => 'Tunggul',
                'nim' => '102',
            ],
        ]);
    }
}
  • DB::table(): Menentukan tabel yang akan diisi.
  • insert(): Memasukkan beberapa data sekaligus.
  • Data mahasiswa dimasukkan dalam bentuk array yang berisi nama dan NIM.

3. perintah untuk menjalankan seeder

  1. php artisan db:seed: Menjalankan DatabaseSeeder.php.
  2. php artisan db:seed --class=NamaFileSeeder: Menjalankan seeder tertentu, misalnya articleSeeder.php.
  3. php artisan migrate:fresh --seed: Menghapus semua tabel, menjalankan ulang migration, lalu mengisi data awal melalui seeder.


File seeder yang ingin dijalankan melalui perintah php artisan db:seed harus didaftarkan terlebih dahulu di file utama DatabaseSeeder.php menggunakan method call().

MODEL

Model merupakan komponen Laravel yang berfungsi untuk berinteraksi dengan tabel database, seperti mengambil, menambahkan, memperbarui, dan menghapus data. Model menggunakan Eloquent ORM untuk menghubungkan kode PHP dengan tabel database. Secara default, Laravel menghubungkan model dengan tabel berdasarkan nama model dalam bentuk jamak. Contohnya, model Mahasiswa akan terhubung dengan tabel mahasiswas.

1. cara membuat model

kita bisa membuat file model dengan menjalankan perintah berikut pada terminal:

php
1
php artisan make:model NamaModel

Perintah tersebut menghasilkan file NamaModel.php di direktori app/Models/.

2. contoh file model

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Mahasiswa extends Model
{
    protected $fillable = [
        'nama',
        'nim',
    ];
}
  • extends Model: Menjadikan class sebagai model Eloquent.
  • $fillable: Menentukan kolom yang boleh diisi melalui mass assignment, yaitu nama dan nim.
  • Mahasiswa: Secara default terhubung dengan tabel mahasiswas.

Praktik membuat migration, seeder, model untuk sistem perpustakaan

1. buat migration

php
1
php artisan make:migration create_bukus_table

Buka file migration di database/migrations/, lalu isi method up() dan down() berikut:

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

public function up(): void
{
    Schema::create('bukus', function (Blueprint $table) {
        $table->id();
        $table->string('kode_buku')->unique();
        $table->string('judul');
        $table->string('penulis');
        $table->year('tahun_terbit');
        $table->timestamps();
    });
}

public function down(): void
{
    Schema::dropIfExists('bukus');
}
  • id(): Membuat primary key otomatis.
  • string('kode_buku')->unique(): Menyimpan kode buku yang tidak boleh duplikat.
  • string('judul'): Menyimpan judul buku.
  • string('penulis'): Menyimpan nama penulis.
  • year('tahun_terbit'): Menyimpan tahun terbit buku.
  • timestamps(): Menambahkan kolom created_at dan updated_at.
  • down(): Menghapus tabel bukus ketika migration dibatalkan.


kemudian jalankan migration menggunakan perintah berikut:

php
1
php artisan migrate

2. membuat model

buat file model dengan menjalankan perintah berikut:

php
1
php artisan make:model Buku

kemudian Buka file app/Models/Buku.php, lalu isi dengan kode berikut:

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Buku extends Model
{
    protected $fillable = [
        'kode_buku',
        'judul',
        'penulis',
        'tahun_terbit',
    ];
}
  • extends Model: Menjadikan class Buku sebagai model Eloquent.
  • $fillable: Menentukan atribut yang boleh diisi melalui mass assignment.
  • Buku: Secara konvensi terhubung dengan tabel bukus.

3. buat seeder

buat file seeder dengan menjalankan perintah berikut:

php
1
php artisan make:seeder BukuSeeder

Buka file database/seeders/BukuSeeder.php, kemudian isi dengan kode berikut:

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Buku;

class BukuSeeder extends Seeder
{
    public function run(): void
    {
        Buku::create([
            'kode_buku' => 'BK001',
            'judul' => 'Pemrograman Laravel',
            'penulis' => 'Andi',
            'tahun_terbit' => 2024,
        ]);

        Buku::create([
            'kode_buku' => 'BK002',
            'judul' => 'Dasar Basis Data',
            'penulis' => 'Budi',
            'tahun_terbit' => 2023,
        ]);

        Buku::create([
            'kode_buku' => 'BK003',
            'judul' => 'Algoritma Pemrograman',
            'penulis' => 'Siti',
            'tahun_terbit' => 2022,
        ]);
    }
}
  • Buku: Model yang digunakan untuk mengakses tabel bukus.
  • run(): Method yang dieksekusi ketika seeder dijalankan.
  • Buku::create(): Menambahkan data buku menggunakan Eloquent.
  • Setiap data memiliki kode_buku yang berbeda untuk memenuhi constraint unique.

Agar BukuSeeder dijalankan melalui perintah php artisan db:seed, daftarkan class tersebut di database/seeders/DatabaseSeeder.php.

php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    public function run(): void
    {
        $this->call([
            BukuSeeder::class,
        ]);
    }
}

Method call() digunakan untuk mendaftarkan seeder yang akan dieksekusi ketika seeder utama dijalankan.

kemudian jalankan seeder dengan menjalankan perintah berikut:

php
1
php artisan db:seed