يحتوي Laravel على خاصية صب مدمجة لأنواع date
datetime
، ولكن إذا كنت تريد استخدام فترات ISO 8061 مع فئة DateInterval
الأصلية، أو CarbonInterval
الخاص بـ Carbon، فلن يحالفك الحظ.
توفر هذه الحزمة نسختين مخصصتين (لـ DateInterval
و CarbonInterval
على التوالي) باستخدام ميزة القوالب المخصصة في Laravel 7.x/8.x.
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
}
نرحب بالمساهمات :) يرجى إنشاء علاقات عامة وسأقوم بمراجعتها/دمجها.
معهد ماساتشوستس للتكنولوجيا