Volver a la página principal
miércoles 9 octubre 2024
8

Cómo castear una propiedad a DateTime en un modelo en Laravel

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.

Castear una propiedad a 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',
];

Explicación detallada

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

Alternativa usando $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.

Algunos ejemplos

  • Casteo a 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.

  • Uso en un controlador:
$usuario = Usuario::find(1);
echo $usuario->created_at->diffForHumans(); // Ejemplo: "hace 5 días"

Referencia oficial

Para más información sobre el casteo de atributos en modelos de Laravel, consulta la documentación oficial de Eloquent en Laravel.

Etiquetas:
php laravel
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer