
Pendahuluan
Bayangin lagi ngerjain fitur sederhana, tapi tiap kali mau nampilin data user, kamu harus nge-format tanggal atau ngubah string berkali-kali di setiap controller. Awalnya keliatan rapi, tapi pas project makin gede, kamu bakal sadar kalau nulis logika konversi data manual itu rewel banget dan gampang bikin bug kalau ada format yang kelewat. Di sinilah Eloquent Accessor, Mutator, dan Casting jadi penyelamat hidup developer biar database tetep bersih dan frontend dapet data yang udah siap pakai.
Tips & Best Practices
- Di banyak project, biasanya saya mulai dari bikin Accessor kalau datanya cuma perlu di-format buat tampilan, kayak nampilin nama lengkap dari kolom first_name dan last_name. Jangan pernah naruh logika concat string di view karena bakal bikin template kamu kotor.
- Saat nanganin data yang kompleks, saya lebih suka pakai Casting daripada nulis Mutator yang kepanjangan. Kalau cuma mau ubah string JSON jadi array atau string jadi boolean, Casting bawaan Laravel jauh lebih elegan dan nggak makan memori berlebih.
- Selalu konsisten pakai Cast di model daripada manual di controller. Ini ngebantu tim lain yang baca code kamu buat langsung paham tipe data apa yang mereka hadapin tanpa perlu buka migrasi database satu per satu.
Contoh Kode
Contohnya, kita sering butuh ngubah format harga biar ada separator ribuan atau ngebaca status user dalam bentuk boolean:
protected $casts = [ 'is_active' => 'boolean', 'settings' => 'array' ];
public function getFormattedPriceAttribute(): string {
return 'Rp ' . number_format($this->price, 0, ',', '.');
}Variasi Implementasi
Kadang kita punya pilihan antara nulis logika di Accessor atau di API Resource. Kalau datanya krusial buat aplikasi secara global, naruh di Accessor model itu paling pas karena bakal kena efeknya di mana pun data dipanggil. Tapi, kalau cuma butuh format khusus buat satu endpoint API tertentu, lebih baik pakai Resource biar model kita nggak 'bengkak' sama fungsi yang sebenernya cuma dipake sekali-kali.
Kesalahan Umum
- Lupa kalau Accessor bakal ke-panggil setiap kali model diakses, jadi jangan masukin query database berat di dalemnya karena bakal bikin N+1 problem parah.
- Ngedefinisin Mutator untuk hal-hal yang sebenernya bisa di-handle sama frontend atau form validation, akhirnya data di database jadi 'terkunci' dalam format yang aneh.
- Salah kaprah pake Casting buat tipe data yang butuh manipulasi dinamis, padahal Casting itu buat transformasi yang sifatnya statis dan rutin.
- Nulis logika bisnis yang berat di Accessor, harusnya Accessor cuma buat *formatting*, bukan buat kalkulasi bisnis kompleks yang harusnya di-handle service layer.
- Mengabaikan tipe data bawaan PHP dan terlalu ngandelin Laravel Casting untuk hal sederhana, padahal kadang fungsi PHP biasa udah lebih dari cukup.
Ringkasan
Setelah sekian banyak refactoring, saya belajar bahwa kunci bikin aplikasi yang 'enak' dipelihara itu bukan soal seberapa banyak library yang dipake, tapi seberapa pinter kita manfaatin fitur native Laravel kayak Accessor dan Casting. Begitu kamu mulai delegasiin urusan format data ke Model, kode di controller bakal jauh lebih kurus dan hidup pun jadi lebih tenang pas harus maintenance fitur bulan depan.
Komentar
Posting Komentar