Laravel memiliki casting bawaan untuk tipe date
& datetime
, tetapi jika Anda ingin menggunakan durasi ISO 8061 dengan kelas DateInterval
asli, atau CarbonInterval
Carbon Anda kurang beruntung.
Paket ini menyediakan dua cast kustom (masing-masing untuk DateInterval
dan CarbonInterval
) menggunakan fitur custom cast Laravel 7.x/8.x.
composer require atymic/laravel-dateinterval-cast
Dalam $casts
model Anda, tetapkan properti yang ingin Anda aktifkan transmisinya ke salah satu cast yang disediakan oleh paket. Anda harus menggunakan bidang varchar
/ string
di tabel database Anda.
class TestModel extends Model
{
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $ casts = [
' is_xyz ' => ' boolean ' ,
' date_interval ' => DateIntervalCast::class,
' carbon_interval ' => CarbonIntervalCast::class,
];
}
Properti pada model kemudian akan dilemparkan ke objek interval, dan disimpan ke database sebagai string durasi ISO 8061. Jika Anda mencoba menetapkan durasi yang tidak valid (atau tabel database berisi durasi tersebut, dan Anda menggunakan pengambil), pengecualian akan muncul.
$ model = new TestModel ();
$ model -> carbon_interval = now ()-> subHours ( 3 )-> diffAsCarbonInterval ();
$ model -> save (); // Saved as `P3H`
$ model -> fresh ();
$ model -> carbon_interval ; // Instance of `CarbonInterval`
$ model -> carbon_interval -> forHumans (); // prints '3 hours ago'
try {
$ model -> carbon_interval = ' not_a_iso_period ' ;
} catch ( Atymic DateIntervalCast Exception InvalidIsoDuration $ e ) {
// Exception thrown if you try to assign an invalid duration
}
Kontribusi diterima :) Silakan buat PR dan saya akan meninjau/menggabungkannya.
MIT