Casting Tipe Field Pada Model Laravel

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.

Photo of author

Ahmad Budairi

Ahmad Budairi, S.Pd. | Seorang Web Developer sekaligus kader Gerakan Pemuda Ansor yang sangat suka menulis artikel. Saya di sini akan lebih banyak menulis seputar Laravel, vue, vuetify, inertiajs, dan hal lain yang berhubungan dengan web development.Kontak: budairi.contact[et]gmail[dot]com