laravel dateinterval cast
vel 8.x Support
Laravel にはdate
およびdatetime
型のキャストが組み込まれていますが、ネイティブのDateInterval
クラスまたは Carbon のCarbonInterval
で ISO 8061 期間を使用したい場合は、運が悪いです。
このパッケージは、Laravel 7.x/8.x のカスタム キャスト機能を使用して、2 つのカスタム キャスト (それぞれ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 期間文字列としてデータベースに保存されます。無効な期間を割り当てようとすると (またはデータベース テーブルに無効な期間が含まれており、ゲッターを使用すると)、例外がスローされます。
$ 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 を作成してください。レビュー/マージします。
マサチューセッツ工科大学