Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

222
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda