Tutorial Membuat Blog dengan Laravel 11 dan Filament: Part 4 - Membuat Migration File untuk tabel Post

Epsiode:


Pada part sebelumnya ktia sudah membuat file Model untuk tabel Post. File Model adalah segala bentuk rules atau perilaku yagn akan dilakukan terhadap tabel tersebut. Namun file model tidak membuat tabel nyata ke dalam database, untuk mngenerate tabel beserta kolomnya dan rules tabel nya, kita perlu membuat file "Migration". Dalam hal ini, kita perlu membuat file migration untuk tabel post.


Berikut isi dari file migration Post

<?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('posts', function (Blueprint $table) {
            $table->id();
            $table->string('title');
            $table->string('slug');
            $table->longText('body');
            $table->foreignId('author_id')->constrained('users')->onDelete('cascade'); // Relasi ke tabel users
            $table->foreignId('category_id')->constrained('categories')->onDelete('set null'); // Relasi ke tabel categories
            $table->enum('status', ['draft', 'published'])->default('draft');
            $table->string('thumbnail')->nullable();
            $table->timestamps();
            $table->softDeletes();
        });
    }

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


Pada kode program diatas kita mendefinisikan tabel dari kolom perkolom, kita menambahkan atribute pada masing - masing kolom. untuk tipe data String akan di ubah ke Varchar dan sejenis nya.

Berikut adalah tabel perbandingan tipe data dalam Laravel Migration dan tipe data yang dibuat di database (misalnya, MySQL, PostgreSQL) dalam bentuk teks terstruktur:

Laravel Migration Command:

  • Database Data Type (MySQL):
  • Database Data Type (PostgreSQL):
  • Keterangan:
  1. $table->bigIncrements('id')
    • BIGINT UNSIGNED AUTO_INCREMENT (MySQL)
    • BIGSERIAL (PostgreSQL)
    • Primary key yang otomatis increment besar.
  2. $table->bigInteger('votes')
    • BIGINT (MySQL)
    • BIGINT (PostgreSQL)
    • Angka besar (tanpa auto-increment).
  3. $table->binary('data')
    • BLOB (MySQL)
    • BYTEA (PostgreSQL)
    • Data biner (misalnya, file atau gambar).
  4. $table->boolean('confirmed')
    • TINYINT(1) (MySQL)
    • BOOLEAN (PostgreSQL)
    • Nilai Boolean (TRUE/FALSE).
  5. $table->char('code', 6)
    • CHAR(6) (MySQL)
    • CHAR(6) (PostgreSQL)
    • String tetap dengan panjang tertentu.
  6. $table->date('created_at')
    • DATE (MySQL)
    • DATE (PostgreSQL)
    • Tanggal (tanpa waktu).
  7. $table->dateTime('created_at')
    • DATETIME (MySQL)
    • TIMESTAMP(0) (PostgreSQL)
    • Tanggal dengan waktu (tanpa zona waktu).
  8. $table->decimal('amount', 8, 2)
    • DECIMAL(8, 2) (MySQL)
    • DECIMAL(8, 2) (PostgreSQL)
    • Angka desimal dengan presisi dan skala tertentu.
  9. $table->double('amount', 8, 2)
    • DOUBLE (MySQL)
    • DOUBLE PRECISION (PostgreSQL)
    • Angka desimal dengan presisi ganda.
  10. $table->enum('level', ['easy', 'hard'])
    • ENUM('easy', 'hard') (MySQL)
    • VARCHAR (PostgreSQL)
    • Tipe enumerasi dengan daftar nilai tetap.
  11. $table->float('score', 8, 2)
    • FLOAT (MySQL)
    • REAL (PostgreSQL)
    • Angka floating-point kecil.
  12. $table->foreignId('user_id')
    • BIGINT UNSIGNED (MySQL)
    • BIGINT (PostgreSQL)
    • ID foreign key (auto-generated with constraints).
  13. $table->geometry('location')
    • GEOMETRY (MySQL)
    • GEOMETRY (PostgreSQL)
    • Data tipe geometri (spatial).
  14. $table->increments('id')
    • INT UNSIGNED AUTO_INCREMENT (MySQL)
    • SERIAL (PostgreSQL)
    • Primary key yang otomatis increment kecil.
  15. $table->integer('votes')
    • INT (MySQL)
    • INTEGER (PostgreSQL)
    • Angka integer kecil (tanpa auto-increment).
  16. $table->json('options')
    • JSON (MySQL)
    • JSON (PostgreSQL)
    • Kolom JSON untuk menyimpan data terstruktur.
  17. $table->jsonb('options')
    • N/A (MySQL)
    • JSONB (PostgreSQL)
    • JSON dengan optimasi penyimpanan dan pencarian (khusus PostgreSQL).
  18. $table->longText('description')
    • LONGTEXT (MySQL)
    • TEXT (PostgreSQL)
    • Teks panjang.
  19. $table->mediumInteger('votes')
    • MEDIUMINT (MySQL)
    • INTEGER (PostgreSQL)
    • Angka medium-size integer (jarang digunakan).
  20. $table->mediumText('description')
    • MEDIUMTEXT (MySQL)
    • TEXT (PostgreSQL)
    • Teks ukuran medium.
  21. $table->smallInteger('votes')
    • SMALLINT (MySQL)
    • SMALLINT (PostgreSQL)
    • Angka kecil.
  22. $table->string('email')
    • VARCHAR(255) (MySQL)
    • VARCHAR(255) (PostgreSQL)
    • String (dengan panjang default 255 karakter).
  23. $table->text('description')
    • TEXT (MySQL)
    • TEXT (PostgreSQL)
    • Teks pendek/panjang.
  24. $table->time('sunrise')
    • TIME (MySQL)
    • TIME (PostgreSQL)
    • Waktu (tanpa tanggal).
  25. $table->timestamp('added_at')
    • TIMESTAMP (MySQL)
    • TIMESTAMP(0) (PostgreSQL)
    • Timestamp (biasanya dengan zona waktu UTC).
  26. $table->tinyInteger('votes')
    • TINYINT (MySQL)
    • SMALLINT (PostgreSQL)
    • Angka kecil sekali.
  27. $table->unsignedBigInteger('votes')
    • BIGINT UNSIGNED (MySQL)
    • BIGINT (PostgreSQL)
    • Angka besar tanpa tanda (positif).
  28. $table->uuid('id')
    • CHAR(36) (MySQL)
    • UUID (PostgreSQL)
    • Universally Unique Identifier (UUID).
  29. $table->year('birth_year')
    • YEAR (MySQL)
    • INT (PostgreSQL)
    • Tipe data tahun (angka 4 digit).


Dalam code migration tersebut juga ada penambahan atribut untuk foreignkey


$table->foreignId('author_id')->constrained('users')->onDelete('cascade'); // Relasi ke tabel users

$table->foreignId('category_id')->constrained('categories')->onDelete('set null'); // Relasi ke tabel categories


Demikian untuk File Migration, silahkan kmu coba buat untuk Model dan Migration table slider, silahkan lihat ERD pada Part 1 dan part 2

Website Development | Banu T | 2 years ago