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