
Pendahuluan
Bayangin lagi ngerjain fitur profil user yang ribet, tapi tiba-tiba kepikiran gimana cara rapiin format nama atau enkripsi data sebelum masuk database tanpa harus nulis logika berulang di setiap controller. Accessor dan Mutator itu penyelamat banget buat kita yang pengen model Laravel tetap bersih. Daripada capek manggil fungsi format sana-sini di controller, mending taruh logikanya langsung di layer data.
Tips & Best Practices
- Di banyak project, biasanya saya mulai dari menempatkan logic format teks sederhana di Accessor agar controller tetap fokus ke HTTP request saja.
- Kalau lagi berurusan sama data sensitif, saya selalu pakai Mutator untuk memastikan data di-hash atau di-sanitize sebelum sampai ke database, jadi nggak ada celah lupa hashing manual di setiap controller.
- Untuk data yang sering dihitung atau dikombinasikan, saya usahakan simpan dalam Accessor saja, jadi kapanpun atribut itu dipanggil, dia selalu fresh dan sinkron dengan perubahan data lainnya.
Contoh Kode
Misalnya kita punya field first_name dan last_name, kita bisa bikin atribut virtual full_name dengan Accessor:
public function getFullNameAttribute(): string
{
return "{$this->first_name} {$this->last_name}";
}Atau untuk Mutator, biasanya saya pakai buat memastikan format input selalu lowercase:
public function setEmailAttribute($value)
{
$this->attributes['email'] = strtolower($value);
}Variasi Implementasi
Sebenarnya ada cara modern di Laravel versi terbaru pakai Attribute::make. Kalau cara lama pakai method get...Attribute, sekarang lebih clean pakai class Attribute. Biasanya kalau project-nya udah pakai PHP 8+, saya pasti beralih ke syntax ini karena lebih intuitif dan mendukung casting otomatis di satu tempat.
Kesalahan Umum
- Lupa kalau Accessor tetap jalan saat akses data, jadi kalau logic-nya berat banget, bisa bikin database query jadi lambat.
- Sering terjebak bikin Mutator untuk data yang sebenarnya harusnya di-handle oleh library validasi, akhirnya controller malah nggak validasi input.
- Asal kasih nama method yang nggak sesuai sama convention Laravel, alhasil fitur ini jadi nggak kedeteksi sama eloquent.
- Mencoba logic yang terlalu kompleks di dalam model, yang seharusnya lebih pantas di-handle di service layer atau domain object.
- Nggak mempertimbangkan akses via JSON response, padahal Accessor akan otomatis muncul di API result dan kadang malah membocorkan data yang nggak perlu.
Ringkasan
Intinya, Accessor dan Mutator itu seperti asisten pribadi buat model kita. Selama kita tahu kapan harus pakai (untuk urusan transformasi data) dan kapan harus berhenti (sebelum logic-nya jadi terlalu gemuk), fitur ini bakal bikin codebase kita jauh lebih rapi dan maintainable. Semangat ngoding-nya!
Komentar
Posting Komentar