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'
];
...