laravel dateinterval cast
vel 8.x Support
Laravel에는 date
및 datetime
유형에 대한 캐스팅이 내장되어 있지만 기본 DateInterval
클래스 또는 Carbon의 CarbonInterval
과 함께 ISO 8061 기간을 사용하려는 경우 운이 좋지 않습니다.
이 패키지는 Laravel 7.x/8.x의 사용자 정의 캐스트 기능을 사용하여 두 가지 사용자 정의 캐스트(각각 DateInterval
및 CarbonInterval
에 대해)를 제공합니다.
composer require atymic/laravel-dateinterval-cast
모델의 $casts
에서 패키지에서 제공하는 캐스트 중 하나에 캐스팅을 활성화하려는 속성을 할당합니다. 데이터베이스 테이블에서 varchar
/ string
필드를 사용해야 합니다.
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,
];
}
그러면 모델의 속성이 간격 개체로 캐스팅되고 ISO 8061 기간 문자열로 데이터베이스에 저장됩니다. 유효하지 않은 기간을 할당하려고 하면(또는 데이터베이스 테이블에 기간이 포함되어 있고 getter를 사용하는 경우) 예외가 발생합니다.
$ 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
}
기여를 환영합니다 :) PR을 작성해 주시면 검토/병합해 드리겠습니다.
MIT