Laravel 13.2 acepta atributos PHP como #[Fillable], #[Guarded], #[Hidden] y #[Table] en modelos Eloquent. Las propiedades tradicionales siguen siendo válidas. La versión ofrece una segunda sintaxis para declarar metadatos que controlan asignación masiva, serialización y nombre de tabla.
Cambiar $fillable por un atributo puede parecer una preferencia estética. Sin embargo, en un modelo extenso la configuración cambia de posición en el orden de lectura. El contrato aparece junto al nombre de la clase, antes de casts, relaciones, scopes y métodos de dominio. Un revisor identifica reglas sensibles sin buscar por todo el cuerpo.
El valor no surge de convertir todos los archivos. Aparece cuando el equipo elige una convención clara y usa la nueva forma donde mejora inspección y consistencia.
Declarar arriba reduce el trabajo de búsqueda
Los modelos Eloquent acumulan responsabilidades con facilidad. Incluso en proyectos cuidadosos, un archivo puede contener configuración de tabla, campos asignables, atributos ocultos, casts y relaciones. Cada elemento tiene un impacto diferente, pero la sintaxis con propiedades los sitúa en el mismo nivel visual que cualquier estado interno.
Los atributos PHP anexan metadatos a una declaración. Al abrir el archivo, el lector ve que un modelo apunta a una tabla fuera de la convención, restringe asignación y oculta campos serializados. Las decisiones de efecto amplio quedan concentradas y ayudan durante el code review.
El beneficio aumenta en reglas sensibles de seguridad. Un cambio en campos asignables merece atención distinta de un método auxiliar. Poner la lista arriba no evita un error de mass assignment, pero reduce la posibilidad de perder una modificación importante en un diff extenso.
Las herramientas también pueden aprovechar la estructura. Reflection lee atributos de forma estándar y los analizadores estáticos pueden ofrecer navegación o diagnóstico sin interpretar propiedades convencionales del framework. Ese potencial depende del ecosistema; la legibilidad es la ventaja inmediata.
Dos sintaxis crean una decisión de equipo
La compatibilidad evita una migración obligatoria, pero permite que modelos vecinos expresen la misma regla de dos formas. Si cada persona elige por gusto, el proyecto cambia un problema de búsqueda por inconsistencia.
Una convención sencilla puede indicar que el código nuevo usa atributos y que el existente cambia solo cuando ya está siendo modificado. Otro equipo puede conservar propiedades en modelos pequeños y usar atributos en clases con mucha configuración. Ambas opciones funcionan si la regla es previsible.
Conviene evitar convertir toda la base solo para modernizar su apariencia. Ese diff toca archivos estables, aumenta conflictos y ofrece poco retorno funcional. Una migración oportunista mantiene la revisión vinculada a cambios reales. Automatizar vale la pena cuando existe volumen suficiente y una comprobación confiable del comportamiento.
Tampoco conviene mezclar atributo y propiedad para la misma preocupación dentro de una clase. Aunque el framework defina precedencia, el lector necesita descubrir qué valor gana. Una fuente única por regla deja el contrato claro.
Los metadatos no sustituyen límites del flujo
#[Fillable] sigue siendo una parte de la protección contra entradas indebidas. Controllers y servicios deben usar datos validados, y las operaciones sensibles pueden exigir asignación explícita. Mover la lista al inicio mejora visibilidad, pero no corrige un flujo que envía $request->all() al modelo.
El mismo cuidado se aplica a #[Hidden]. Ocultar un atributo de la serialización predeterminada no es un mecanismo general de autorización. Otra consulta, log o transformación puede exponer el valor. La política debe existir en la capa que decide quién recibe los datos.
#[Table] vuelve fáciles de localizar las excepciones de nombres. No convierte una tabla fuera del estándar en una opción mejor. Antes de añadir el atributo, todavía conviene preguntar si la divergencia viene de una integración antigua, un límite de la base o una inconsistencia acumulada.
Cómo evaluar la adopción
Un piloto puede comenzar con tres modelos: uno sencillo, otro cargado de configuración y un tercero vinculado a una entrada sensible. El equipo compara tiempo de lectura, claridad del diff y soporte del editor. Después ejecuta la suite para confirmar serialización, asignación y resolución de la tabla.
Laravel 13 ya ampliaba atributos en controllers, jobs, commands, listeners y mailables. La versión 13.2 extiende ese lenguaje declarativo a Eloquent y añade enums en #[Queue] y #[Connection], listas de retrasos en #[Backoff] y ajustes en factories.
La dirección es coherente: los metadatos de ejecución se acercan a la declaración que modifican. Una base gana cuando esa proximidad reduce búsqueda y ambigüedad. Si la conversión solo cambia caracteres sin una convención compartida, la nueva sintaxis se vuelve otra elección para discutir en cada pull request.
Si tu empresa está evaluando algo parecido, escríbeme por LinkedIn o por WhatsApp.