Migrations Laravel Blueprint Macro - Printable Version +- Laravel Indonesia (https://laravel-id.my.id) +-- Forum: Laravel Framework (https://laravel-id.my.id/forumdisplay.php?fid=3) +--- Forum: Database (https://laravel-id.my.id/forumdisplay.php?fid=14) +--- Thread: Migrations Laravel Blueprint Macro (/showthread.php?tid=6) |
Laravel Blueprint Macro - adminustrator - 10-18-2024 DRY untuk kolom-kolom tabelmu! Bismillahirrahmanirrahim Apakah kamu pernah merancang desain struktur database dan menemukan bahwa ada beberapa kolom yang hampir selalu ada di setiap tabelnya? Lebih memukau lagi bahwa kamu selalu menulis ulang di setiap file migration-nya? Apakah ada cara agar kamu tidak menulis ulang kolom-kolom tersebut di hampir setiap file migration yang ada? Studi Kasus Misalnya saya selalu ingin memasukkan beberapa kolom ini:
Maka di setiap file migration harus selalu ada baris ini: PHP Code: $table->string('created_by', 150)->nullable()->default('Sistem'); Sudah terbayang bagaimana repotnya untuk melakukan copy-paste setiap menambah file migration baru? Solusi Ada 2 cara yang saya tau untuk menangani masalah perulangan di atas, antara lain:
Keduanya tetap memanfaatkan fitur Macro pada Blueprint. Pada artikel ini saya mengesampingkan teori dan lebih mengedepankan prakteknya. Mari kita mulai ngoding! Lewat AppServiceProvider Dalam function boot, tambahkan kode berikut: PHP Code: // Blueprint Macro Maka jika kamu butuh kolom-kolom tersebut dalam file migration, maka cukup tambahkan saja $table->opsFields() di dalamnya. Contohnya jadi seperti ini: PHP Code: Schema::create('categories', function (Blueprint $table) { Menggunakan Trait Buat sebuah class baru dengan perintah php artisan make:trait OpsFields dan tuliskan isinya sebagai berikut: PHP Code: public function opsFields(Blueprint $table): void File trait selengkapnya jadi seperti ini: PHP Code: <?php Maka jika kamu butuh kolom-kolom tersebut dalam file migration, maka cukup tambahkan saja $table->opsFields() di dalamnya. Contohnya jadi seperti ini: PHP Code: Schema::create('categories', function (Blueprint $table) { Jangan lupa tambahkan namespace pada bagian atas file migration-nya: PHP Code: use App\Traits\OpsFields; Selengkapnya jadi seperti ini file migration-nya PHP Code: <?php Hasil Jika kamu coba jalankan perintah di terminal sebagai berikut php artisan migrate --pretend, maka akan menghasilkan query sebagai berikut: PHP Code: create table `categories` ( Nah, silahkan kamu pilih mau pakai metode yang mana. Apakah lewat service provider atau trait. Pilihan saya? Trait. Mengapa? Jika menggunakan Trait, maka ia akan hadir jika dipanggil saja. Adapun jika service provider, sejatinya ia akan selalu dipanggil di setiap request, tentang migration atau lainnya. |