isset Model'in içindeki özelliklere (id, name, email vs) ulaşmaya çalıştığınızda bunları veritabanında tutulan tiplerinin dışında başka tipe dönüştürerek kullanmak isteyebilirsiniz. Mesela veritabanında json tutulan bir alanı json_decode kullanmadan otomatik array ya da Collection olarak, timestamp bir alanı Date::parse() yapmadan direkt Carbon objesi olarak almak isteyebilirsiniz. İşte model özelliğine ulaşırken nasıl bir tip ile alacağınızı bu casting ile belirliyorsunuz.
protected $casts = [
'email_verified_at' => 'datetime',
];
Bu, email_verified_at özelliğine ulaşmaya çalıştığımda bunu bana Carbon objesi olarak ver demek. Bu şekilde yaptığınızda direkt şöyle kullanabiliyorsunuz:
$user->email_verified_at instanceof \Illuminate\Support\Carbon // true
$user->email_verified_at->diffForHumans(); // 15 dakika önce
$user->email_verified_at->addDays(10)->isPast(); // false (10 gün ilerisi geçmiş tarih mi?)
$user->email_verified_at->toDayDateTimeString(); // Çar, Mar 16, 2022 14:50
Eğer casting yapmasaydınız direkt veritabanındaki string ifadeyi alırdınız ve elle Carbon objesine çevirmek zorunda kalırdınız:
$emailVerifiedAt = $user->email_verified_at
? Date::parse($user->email_verified_at)
: null;
$emailVerifiedAt?->diffForHumans(); // 15 dakika önce ya da null