Configuración de Propiedades en Modelos Eloquent de Laravel

En el ecosistema de Laravel, la clase Model de Eloquent ORM funciona como el núcleo de la interacción con la base de datos. Para adaptar su comportamiento predeterminado a esquemas relacionales específicos o requisitos de seguridad, el framework proporciona un conjunto de propiedades protegidas que permiten controlar asignaciones, mapeo de tablas, transformación de datos y serialización.

Control de Asignación Masiva

La inserción o actualización de múltiples campos simultáneamente es una característica potente que requiere mecanismos de seguridad para evitar la sobrescritura no autorizada de columnas críticas. Laravel implementa dos estrategias opuestas:

  • $fillable: Actúa como una lista blanca. Solo las columnas definidas en este arreglo aceptarán valores mediante métodos como create() o fill().
  • $guarded: Funciona como una lista negra. Bloquea explícitamente las columnas listadas, permitiendo la asignación masiva en el resto. Asignar un arreglo vacío desactiva la portección por completo, una práctica que solo debe aplicarse en entornos controlados.
protected $fillable = ['first_name', 'work_email', 'department_code'];
// Alternativa con lista negra
protected $guarded = ['clearance_level', 'internal_id'];

Mapeo de Tablas y Claves Primarias

Eloquent sigue convenciones estrictas: nombres de tablas en plural y una clave primaria entera autoincremental llamada id. Cuando se trabaja con bases de datos legacy o esquemas personalizados, es posible redefinir estos valores:

protected $table = 'staff_records';
protected $primaryKey = 'staff_uuid';

Gestión de Marcas de Tiempo

Por defecto, el ORM mantiene automáticamente las columnas created_at y updated_at. Si la tabla subyacente no incluye estos campos o se requiere un manejo manual de las fechas, la propiedad puede desactivarse:

public $timestamps = false;

Transformación de Tipos con $casts

La sincronización de tipos entre PHP y el motor de base de datos se simplifica mediante $casts. Esta propiedad intercepta la lectura y escritura de atributos, convirtiendo automáticamente los valores brutos a estructuras nativas de PHP. Soporta conversiones a booleanos, decimales, arreglos, objetos JSON e instancias de Carbon para el manejo de fechas.

protected $casts = [
    'is_manager'       => 'boolean',
    'monthly_salary'   => 'decimal:2',
    'access_modules'   => 'array',
    'contract_start'   => 'datetime:Y-m-d',
];

Con esta configuración, un entero 0 o 1 en la base de datos se transforma en false o true. Las cadenas JSON se decodifican a arreglos PHP nativos, y las fechas se instancian como objetos Carbon con el formato especificado, eliminando la necesidad de conversiones manuales en la capa de negocio.

Serialización y Exposición de Datos

Al transformar modelos a arreglos o respuestas JSON, es fundamental filtrar información sensible y, en ocasiones, inyectar datos calculados. Laravel ofrece tres propiedades para goebrnar este proceso:

  • $hidden: Excluye permanentemente columnas específicas (como credenciales o tokens) de la salida serializada.
  • $visible: Operación inversa. Solo las columnas listadas se incluirán en la representación JSON o en arreglos.
  • $appends: Permite agregar atributos virtuales que no existen en la base de datos, generalmente respaldados por accesores personalizados.
protected $hidden = ['security_hash', 'temporary_pass'];
protected $visible = ['first_name', 'work_email', 'department_code'];
protected $appends = ['full_title'];

public function getFullTitleAttribute(): string
{
    return "{$this->first_name} - {$this->department_code}";
}

Estas configuraciones se evalúan automáticamente durante la serialización, garantizando que las APIs y las vistas reciban únicamente la estructura de datos validada y formateada según los requisitos de la aplicación.

Etiquetas: Laravel eloquent-orm php-models mass-assignment type-casting

Publicado el 8-9 14:01