Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

218
Vistas
Creación de mutadores con nombres dinámicos en modelos de Laravel Eloquent

Tengo una lista de campos de fecha y todos ellos tienen la misma lógica en sus mutadores. Me gustaría extraer esta funcionalidad a un rasgo para que en el futuro todo lo que necesite sea crear una matriz de campos de fecha en el modelo y usar el rasgo.

Algo como esto:

 foreach( $dates as $date ) { $dateCamelCase = $this->dashesToUpperCase($date); $setDateFunctionName ='set'.$dateCamelCase.'Attribute'; $this->{$setDateFunctionName} = function() use($date) { $this->attributes[$date] = date( 'Ym-d', strtotime( $date )); }; }
about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Antes de responder a su pregunta específica, primero veamos cómo funcionan los mutadores Eloquent.

Cómo funcionan los mutadores elocuentes

Todas las clases derivadas de Eloquent Model tienen sus __set() y offsetSet() para llamar al método setAttribute que se encarga de establecer el valor del atributo y mutarlo, si es necesario.

Antes de establecer el valor, comprueba:

  • Métodos mutadores personalizados
  • Campos de fecha
  • JSON castables y campos

Aprovechando el proceso

Al comprender esto, podemos simplemente aprovechar el proceso y sobrecargarlo con nuestra propia lógica personalizada. Aquí hay una implementación:

 <?php namespace App\Models\Concerns; use Illuminate\Database\Eloquent\Concerns\HasAttributes; trait MutatesDatesOrWhatever { public function setAttribute($key, $value) { // Custom mutation logic goes here before falling back to framework's // implementation. // // In your case, you need to check for date fields and mutate them // as you wish. I assume you have put your date field names in the // `$dates` model property and so we can utilize Laravel's own // `isDateAttribute()` method here. // if ($value && $this->isDateAttribute($key)) { $value = date('Ym-d', strtotime($value)); } // Handover the rest to Laravel's own setAttribute(), so that other // mutators will remain intact... return parent::setAttribute($key, $value); } }

No hace falta decir que sus modelos requieren usar este rasgo para habilitar la funcionalidad.

no lo vas a necesitar

Si la mutación de fechas es el único caso de uso que necesita para tener "mutadores con nombre dinámico" , eso no es necesario en absoluto. Como ya habrás notado , los campos de fecha de Eloquent pueden ser reformateados por el propio Laravel:

 class Whatever extends Model { protected $dates = [ 'date_field_1', 'date_field_2', // ... ]; protected $dateFormat = 'Ym-d'; }

Todos los campos enumerados allí tendrán el formato de $dateFormat . Entonces no reinventemos la rueda.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda