Tutorial Membuat Blog dengan Laravel 11 dan Filament: Part 2 - Membuat Model dan Migration File untuk Category

Epsiode:


Memulai Membuat Model: Penerjemahan Diagram Relasi Entiti ke dalam Laravel

Pada artikel sebelumnya, kita telah membahas struktur dasar aplikasi Laravel 11 dan merancang Diagram Relasi Entiti (ERD) untuk blog yang akan kita bangun. ERD ini menggambarkan hubungan antar data yang akan kita simpan dalam database.

Memahami Relasi Antar Tabel

Berdasarkan ERD di atas, kita akan memiliki empat tabel utama:

  • Users: Menyimpan data pengguna seperti nama, email, dan password.
  • Categories: Menyimpan kategori-kategori artikel.
  • Posts: Menyimpan data artikel, termasuk judul, konten, dan kategori.
  • Slider: Menyimpan data untuk slider di halaman utama (misalnya, gambar dan teks).


Relasi antar tabel:

  • Posts memiliki relasi belongsTo dengan Users (setiap post dimiliki oleh satu user).
  • Posts memiliki relasi belongsTo dengan Categories (setiap post termasuk dalam satu kategori).
  • Posts memiliki relasi hasMany dengan Slider (setiap post bisa memiliki banyak slider).


Urutan Pembuatan Model

Dalam membuat model, saya biasanya mengikuti urutan berikut:

  1. Users: Model ini biasanya sudah ada secara default ketika kita membuat project Laravel.
  2. Categories: Kita buat model untuk menyimpan data kategori artikel.
  3. Posts: Model ini dibuat setelah model Users dan Categories karena memiliki relasi dengan kedua model tersebut.
  4. Slider: Model ini dibuat terakhir karena memiliki relasi dengan model Posts.


Mengapa tabel Posts dibuat terakhir?

Dengan membuat tabel Posts terakhir, kita dapat memanfaatkan fitur foreign key constraint yang disediakan oleh database. Hal ini akan membantu menjaga integritas data dan mencegah terjadinya data yang tidak valid. Misalnya, kita tidak bisa membuat sebuah post jika user atau kategori yang terkait tidak ada.


Langkah Selanjutnya

Setelah memahami relasi antar tabel dan urutan pembuatan model, kita akan mulai membuat file migrasi dan model untuk masing-masing tabel.

Memahami ERD

ERD yang Anda berikan menunjukkan adanya empat tabel utama:

  • users: Tabel ini menyimpan informasi tentang pengguna, seperti email, username, dan peran.
  • posts: Tabel ini menyimpan informasi tentang postingan, termasuk judul, konten, penulis, kategori, dan slider yang terkait.
  • categories: Tabel ini menyimpan informasi tentang kategori postingan.
  • slider: Tabel ini menyimpan informasi tentang slider yang ditampilkan pada website, akan digunakan untuk halaman utama.


Pada artikel kali ini saya akan mencontohkan pembuatan Model dan Migration File Untuk tabel "Categories".

  • Buka terminal dan jalankan perintah sebagai berikut
  • php artisan make:model Category -m
  • Maka akan tergenerate dua file secara otomatis
  • File Model "Category" terletak pada app/Models/Category.php
  • File Migration untuk kategori, dengan nama file yagn panjang, berada pada folder "database/migrations"


Edit file Model Category dan isikan Code sebagai berikut

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\SoftDeletes;
use Illuminate\Support\Str;

class Category extends Model
{
    use HasFactory, SoftDeletes;

    protected $fillable = [
        'name',
        'slug',
        'status',
    ];

    protected static function boot()
    {
        parent::boot();

        // Create slug from name before saving
        static::saving(function ($category) {
            if (empty($category->slug)) {
                $category->slug = Str::slug($category->name);
            }
        });
    }

    public function posts(): HasMany
    {
        return $this->hasMany(Post::class);
    }
}


Edit file migration nya menjadi seperti berikut

<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('slug');
            $table->enum('status', ['active', 'notactive'])->default('active');
            $table->timestamps();
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('categories');
    }
};


saya akan memberikan penjelasan berupa Video, pada episode selanjutnya.

Terima kasih

Website Development | Banu T | 2 years ago