Bekerja menggunakan model atau eloquent Laravel sangatlah menyenangkan. Banyak fitur yang dapat digunakan dengan mudah untuk mempercepat pengembangan aplikasi web. Salah satunya adalah casting tipe field.
Katakanlah pada tabel users yang digunakan model User memiliki salah satu field tipe json dengan nama address. Secara default, field tersebut ketika diakses melalui model akan diubah menjadi string. Sehingga kita tidak bisa mengakses objek atau array yang ada di dalamnya secara langsung.
Contoh isi data pada field address misalnya seperti di bawah ini:
{
"address": {
"street": "Jl. Sudirman",
"city": "Jakarta",
"province": "DKI Jakarta",
"zip": "12345"
}
}
Kita tidak bisa mengambil data kota sebagai object secara langsung semisal: $user->address->city
. Untuk dapat memanggilnya seperti itu maka kita perlu mengubahnya menjadi objek terlebih dahulu menggunakan fungsi json_decode($user->address)
;.
Casting tipe field menjadi berbentuk array adalah salah satu cara untuk menghemat waktu. Kita tidak perlu mendefinisikan accessor secara manual untuk mengubah field tersebut menjadi array.
Contoh Implementasi Casting Tipe Field
Contoh penggunaannya adalah dengan menambahkan kodingan berikut ini di dalam model User.
protected $casts = [
'address' =>'array';
];
Casting di atas memerintahkan pada Laravel untuk menandai kalau field address formatnya harus berupa array saat insert maupun menampilkan.
Dengan mendefinisikan casting address berformat array seperti di atas maka kita bisa langsung mengakses object city yang ada di dalam kolom address secara langsung.
Contoh Mengakses Data
Contoh penggunannya adalah dengan memanggil object city seperti di bawah ini.
$user = User::find(2);
echo $user->address->city;
//output: DKI Jakarta
Jenis-Jenis Tipe Casting yang Didukung Laravel
Berikut ini adalah jenis type casting yang bisa digunakan untuk menandai tipe data apa yang seharusnya disajikan laravel oada filed tertentu.
array
AsStringable::class
boolean
collection
date
datetime
immutable_date
immutable_datetime
decimal:<precision>
double
encrypted
encrypted:array
encrypted:collection
encrypted:object
float
integer
object
real
string
timestamp
Referensi selengkapnya mengenai casting bisa dilihat pada dokumentasi Laravel.