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