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
}
ยินดีต้อนรับการมีส่วนร่วม :) โปรดสร้าง PR แล้วฉันจะตรวจสอบ/รวมมัน
เอ็มไอที