Laravel verfügt über integriertes Casting für date
und datetime
Uhrzeittypen. Wenn Sie jedoch ISO 8061-Dauerwerte mit der nativen DateInterval
Klasse oder CarbonInterval
verwenden möchten, haben Sie kein Glück.
Dieses Paket bietet zwei benutzerdefinierte Umwandlungen (für DateInterval
bzw. CarbonInterval
) unter Verwendung der benutzerdefinierten Umwandlungsfunktion von Laravel 7.x/8.x.
composer require atymic/laravel-dateinterval-cast
Weisen Sie im $casts
Ihres Modells die Eigenschaft, die Sie aktivieren möchten, einem der vom Paket bereitgestellten Casts zu. Sie sollten in Ihrer Datenbanktabelle ein varchar
/ string
Feld verwenden.
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,
];
}
Die Eigenschaft des Modells wird dann in ein Intervallobjekt umgewandelt und als ISO 8061-Dauerzeichenfolge in der Datenbank gespeichert. Wenn Sie versuchen, eine ungültige Dauer zuzuweisen (oder die Datenbanktabelle eine solche enthält und Sie einen Getter verwenden), wird eine Ausnahme ausgelöst.
$ 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
}
Beiträge willkommen :) Bitte erstellen Sie eine PR und ich werde sie überprüfen/zusammenführen.
MIT