Laravel 13 kini memungkinkan Anda mengganti properti $table, $fillable, dan $casts yang memenuhi sebagian besar model dengan atribut PHP asli (native attributes). Perubahan ini berlaku untuk lebih dari selusin fitur framework, mulai dari konfigurasi model hingga event listener dan mailables, dan dapat bekerja tanpa merusak kode yang sudah ada.
Mengapa Laravel menambahkan atribut asli (native attributes)
Laravel telah lama mengandalkan “magic strings” – array berisi nama kolom atau field tersembunyi yang terletak di bagian atas kelas model. Array tersebut tidak memberikan petunjuk apa pun kepada IDE mengenai skema yang mendasarinya, sehingga proses refactoring nama kolom bisa saja terlewatkan tanpa disadari. Dengan memindahkan konfigurasi ke dalam kode yang nyata dan bertipe (typed), Laravel memberikan cara bagi pengembang untuk menjaga isi kelas tetap fokus pada logika bisnis, sembari membiarkan editor menampilkan fitur autocomplete, pengecekan tipe (type-checking), dan alat rename-refactor.
Framework ini membaca atribut melalui PHP reflection API dan menyimpan hasilnya di cache, sehingga overhead saat runtime secara efektif adalah nol. Model berbasis properti yang sudah ada akan terus berfungsi persis seperti saat ini, yang berarti Anda dapat mengadopsi sintaks baru ini secara bertahap.
Apa yang Anda dapatkan
- Konfigurasi bertipe (Typed configuration) – Atribut menerima argumen bertipe, menghilangkan magic strings. Ubah nama kolom dan IDE akan menunjukkan setiap tempat yang perlu Anda perbarui.
- Isi kelas yang lebih bersih – Semua konfigurasi berada di atas nama kelas; isi kelas hanya berisi relasi, scope, dan method.
- Pengalaman IDE yang lebih baik – Autocomplete dan analisis statis bekerja pada argumen atribut, sesuatu yang tidak dapat diberikan oleh array string.
- Tidak ada perubahan yang merusak (No breaking changes) – Laravel membaca properti lama maupun atribut baru, sehingga codebase yang bercampur dapat berjalan tanpa masalah.
Panduan migrasi langkah demi langkah
Identifikasi model yang akan dimigrasi
Buka file model. Jika belasan baris pertama didominasi oleh$table,$fillable,$hidden, atau metodecasts(), maka model tersebut adalah kandidatnya.Tambahkan kelas atribut
Di bagian atas file, impor kelas atribut yang sesuai dengan properti yang akan Anda ganti (misalnya,Table,Fillable,Casts). Laravel menyertakan atribut-atribut ini secara bawaan.Ganti deklarasi properti dengan atribut
// Before protected $table = 'site_deployments'; protected $fillable = ['site_id', 'server_id', 'status']; protected function casts(): array { return ['is_rollback' => 'boolean']; }// After #[Table('site_deployments')] #[Fillable(['site_id', 'server_id', 'status'])] #[Casts(['is_rollback' => 'boolean'])] class Deployment extends Model { // business logic only }Sintaks atribut diletakkan tepat di atas deklarasi kelas. Hapus properti atau metode asli setelah memastikan atribut tersebut berfungsi.
Jalankan suite pengujian
Verifikasi bahwa mass-assignment, serialisasi, dan casting kustom apa pun masih berperilaku seperti sebelumnya. Penanganan atribut Laravel disimpan di cache, jadi pengujian yang gagal biasanya menunjukkan adanya kesalahan ketik (typo) pada argumen atribut.Commit dan deploy dalam batch kecil
Push model yang telah dimigrasi ke branch fitur, gabungkan (merge) setelah pipeline CI lulus, dan luncurkan ke sebagian server. Karena sintaks properti lama masih didukung, referensi yang tersisa tidak akan menyebabkan error saat runtime.Ulangi per namespace
Alih-alih menulis ulang seluruh codebase sekaligus, pindahkan satu grup logis model (misalnya, semua entitas terkait penagihan) ke atribut, lalu ulangi untuk grup berikutnya. Ini membatasi dampak (blast radius) dari regresi apa pun.
Alat dan jaring pengaman
- Rector – Alat refactoring otomatis yang dapat mengubah sintaks properti yang repetitif menjadi atribut. Jalankan pada salinan codebase, tinjau perbedaannya (diff), dan terapkan perubahan yang terlihat benar.
- Pengujian otomatis – Utilitas pengujian bawaan Laravel menangkap ketidaksesuaian dalam mass-assignment dan output JSON. Pastikan pengujian tetap hijau (pass) setelah setiap langkah migrasi.
- Feature flags – Jika Anda perlu melakukan rollback dengan cepat, bungkus penggunaan atribut baru di balik flag yang dapat berpindah antara konfigurasi lama dan baru.
Kapan Anda mungkin melewatkan migrasi
Jika sebuah proyek berukuran kecil, stabil, dan jarang disentuh, manfaat dari model yang lebih bersih mungkin tidak sebanding dengan upaya konversinya. Sintaks atribut bersifat opsional; Anda dapat terus menggunakan pendekatan properti klasik tanpa batas waktu. Sebaliknya, untuk aplikasi yang dikembangkan secara aktif, terutama yang memiliki model besar atau perubahan skema yang sering, mengadopsi atribut lebih awal akan mengurangi hambatan di masa mendatang.
Apa yang perlu diperhatikan selanjutnya
Dukungan atribut Laravel 13 meluas melampaui model ke event listener, notifikasi, mailables, dan event broadcast. Seiring komunitas mengadopsi sintaks tersebut di area-area tersebut, pola refactoring serupa akan muncul. Pantau panduan upgrade resmi untuk kelas atribut baru apa pun yang hadir dalam rilis minor mendatang.
Kesimpulan: Laravel 13 memberi Anda jalur tanpa biaya untuk model yang lebih ramping dan lebih ramah IDE. Konversikan satu namespace pada satu waktu, andalkan Rector dan test suite Anda, dan Anda akan mendapatkan kelas-kelas yang terbaca seperti spesifikasi bisnis, bukan sekadar file dump konfigurasi.
