Assalamu'alaikum, wr. wb. Kali ini kita akan belajar salah satu fitur unggulan di eloquent Laravel, yaitu Mutator dan Accessor atau biasa disebut setters dan getters. Dimana Mutator digunakan untuk mengubah data atau format inputan sebelum disimpan di database sedangkan Accessor digunakan untuk mengubah data atau format output setelah diambil dari database.
Mutator
Contoh kasus pada Mutator:
Saat menginputkan data, kita ingin apapun bentuk inputannya akan disimpan dengan huruf kecil semua. Nah biasanya jika sudah familiar dengan fungsi di PHP kalian dapat menggunakan strtolower(). Namun kebanyakan penempatannya di controller. Nah masalahnya jika kita menggunakan data tersebut di banyak controller maka akan repot jika mengaturnya satu per satu. Maka dari itu Mutator ini memudahkan kita hanya dengan mengaturnya di file Model saja.
Agar tidak bingung, mari langsung kita praktekan. Disini saya menggunakan projek yang pernah saya buat pada tutorial CRUD Laravel di blog ini.
Buka Model Book.php dan tambahkan kode seperti berikut.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Book extends Model { protected $fillable = [ 'title', 'writer', 'publisher' ]; //Tambahkan ini untuk memformat data / inputan ke- //database menjadi huruf kecil semua public function setTitleAttribute($value) { $this->attributes['title'] = strtolower($value); } }
Dengan begitu, data yang kita simpan ke database otomatis akan di konversi menjadi lowercase semua atau huruf kecil semua.
Penjelasan:
Yang perlu kita perhatikan adalah nama attribute pada nama fungsi / method harus sama dengan nama kolom atau field yang ingin kita format, misal pada kasus di atas kita ingin memformat kolom title maka nama fungsi / method-nya adalah setTitleAttribute($value).
Selanjutnya kurungkurawal attribute juga nama kolom yang ingin di format yaitu title.
Terakhir untuk nama parameter bebas sih, namun umumnya menggunakan $value saja agar lebih mudah dipahami oleh developer lain jika kita bekerja dalam tim.
Accessor
Selanjutnya contoh kasus Accessor:
Jika tadi kita ingin memformat data yang kita simpan, nah yang ini jika kita ingin memformat data dari database ke tampilan atau view. Misalnya tadikan title di database berupa lowercase, nah jika kita ingin format ke uppercase atau huruf besar semua, maka begini caranya.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Book extends Model { protected $fillable = [ 'title', 'writer', 'publisher' ]; //Tambahkan ini untuk memformat data / inputan ke- //database menjadi huruf kecil semua public function setTitleAttribute($value) { $this->attributes['title'] = strtolower($value); } //Tambahkan ini untuk memformat data / output ke- //view menjadi huruf besar semua public function getTitleAttribute($value) { return strtoupper($value); } }
Untuk penjelasan hampir sama seperti yang mutator di atas, perhatikan nama kolom atau field yang ingin di format. Bedanya di accessor ini kita menggunakan method get serta mengembalikan nilai dalam bentuk format yang kita inginkan, dalam kasus ini kita menggunakan fungsi strtoupper().
Sekarang kita jalankan hasilnya seperti berikut:
Perhatikan kita menulisnya di awali dengan huruf besar tiap awal kata, setelah kita submit, maka di database akan menjadi kecil semua, karena sudah kita setting menggunakan mutator pada model Book tadi. Lihat gambar berikut:
Sekarang perhatikan pada tampilan view nya, kalian akan melihat hurufnya menjadi besar semua, karena sudah kita setting menggunakan accessor tadi.
Oke sekian dulu tutorial kali ini, jika ada yang dibingungkan silahkan tinggalkan dikolom komentar jangan dibawa tidur, Oke!
Terimakasih, mohon maaf jika ada salah salam penyampaian, Wassalamu'alaikum Wr. Wb.
Tags:
Laravel