En Laravel, se pueden castear atributos de los modelos a tipos específicos, como DateTime
, para facilitar su manipulación. Esto se logra mediante la propiedad $casts
o $dates
del modelo, permitiendo trabajar con fechas de manera sencilla y aprovechar métodos y funciones propias de los objetos Carbon
de Laravel.
DateTime
en Laravel
Laravel permite que las propiedades de tipo fecha sean tratadas como instancias de Carbon
, una extensión de PHP para manejar fechas y tiempos. Para lograr esto, es necesario definir el casteo en el modelo utilizando la propiedad $casts
:
protected $casts = [
'fecha_de_nacimiento' => 'datetime',
];
1. Definir el casteo: Se utiliza la propiedad $casts
del modelo, donde se especifica la columna y el tipo de dato al que se desea castear. En este caso, 'datetime'
se usa para tratar la propiedad como una instancia de DateTime
.
2. Tipos de casteo disponibles: Laravel permite varios tipos de casteo, como integer
, boolean
, array
y datetime
. Usar 'datetime'
convierte automáticamente la propiedad en un objeto Carbon
, lo que facilita la manipulación de fechas y horas.
3. Manipulación de fechas: Una vez casteada la propiedad a datetime
, se pueden utilizar métodos de Carbon
como format
, addDays
, diffForHumans
, etc., directamente en esa propiedad:
$usuario = Usuario::find(1);
echo $usuario->fecha_de_nacimiento->format('d-m-Y'); // Muestra la fecha formateada
$dates
(Deprecado en Laravel 8+)
Antes de Laravel 8, era común usar la propiedad $dates
para definir las columnas de tipo DateTime
:
protected $dates = ['fecha_de_nacimiento'];
Sin embargo, esta propiedad ha sido reemplazada por el uso de $casts
en versiones más recientes de Laravel, por lo que se recomienda utilizar $casts
para mantener la compatibilidad.
DateTime
en un modelo:
class Usuario extends Model
{
protected $casts = [
'created_at' => 'datetime',
'updated_at' => 'datetime',
];
}
En este caso, tanto created_at
como updated_at
serán tratados como instancias de DateTime
en el modelo Usuario
.
$usuario = Usuario::find(1);
echo $usuario->created_at->diffForHumans(); // Ejemplo: "hace 5 días"
Para más información sobre el casteo de atributos en modelos de Laravel, consulta la documentación oficial de Eloquent en Laravel.
Jorge García
Fullstack developer