Laravel traits mutators to help Date Time manipulation on Eloquent Models.
composer require torzer/laravel-datetime-mutator The MapDateTimeMutator trait is used to set a date and time mutator (only date or time if necessary) related to a specific input format.
WHen using this trait it's not necessary to implement a setVariableAttribute($value) mutator to transform a date from a format to another, WHen using this trait it's not necessary to implement a setVariableAttribute($value) mutator to transform a date from a format to another, as for example from d/m/Y format of a string or object to another that will be used to persist the date in database.
To use it, set in the class:
<?php use Torzer\Common\Traits\MapDateTimeMutator; class MyClass extends Model { use MapDateTimeMutator; ..Set the date fields as you would do in array $dates, but to those dates or timestamps that need to be transformed from one format to another, use the array $mapDateTimeMutator with the name of the date field as the array key and an array mapping from and to formats:
<?php use Torzer\Common\Traits\MapDateTimeMutator; class MyClass extends Model { use MapDateTimeMutator; protected $mapDateTimeMutator = [ 'start_date' => ['from' => 'd/m/Y', 'to' => 'Y-m-d'], 'finish_date' => ['from' => 'd/m/Y', 'to' => 'Y-m-d'] ]; protected $dates = [ 'approved_at', 'start_date', 'finish_date' ]; ... At the example above, the fields start_date and finish_date gonna be handle with the DateTime function of Laravel Eloquent Model, but they arecreated from format d/m/Y set in from key of the $mapDateTimeMutator array, getting as return/setAttribute of the field a string formated using the to key.
The approved_at field in $dates array is still handled with the default behavior of the framework.
Note that the input value of this fields - start_date and finish_date, must be in d/m/Y format.
If you are using Jenssegers/MongoDB driver to persist date only, this trait can help you to handle MongoDB timestamp field type.
To ensure a date gonna be saved in UTC timezone at hour 00:00:00, you must add a date-only setting in array $mapDateTimeMutator:
<?php use Torzer\Common\Traits\MapDateTimeMutator; class MyClass extends Jenssegers\Mongodb\Eloquent\Model { use MapDateTimeMutator; protected $mapDateTimeMutator = [ 'start_date' => ['from' => 'd/m/Y', 'to' => 'Y-m-d'], 'finish_date' => ['from' => 'd/m/Y', 'to' => 'Y-m-d'], 'date-only' => true, ]; protected $dates = [ 'approved_at', 'start_date', 'finish_date' ]; ...