IronWoods.es

Desarrollo web

Blog / Laravel / Accessors y Mutators. Inclusión en Traits

Definir accessors y mutators en un modelo de Eloquent / Laravel nos permiten modificar de forma automática datos entrantes o salientes del mismo. Si estos métodos son comunes para varios modelos pueden incluirse en Traits.

Ejemplos

La mayoría de las tablas de la BD tienen el campo created_at, este dato es recuperado habitualmente, por ejemplo, en un panel de administración, con un accessor obtendremos el dato formateado:


// accessor 
public function getCreatedAtAttribute($value)
{
    return \Carbon\Carbon::parse($value, 'Europe/Madrid')
        ->locale('ES')
        ->isoFormat('DD-MM-YYYY, HH:mm:ss');
}

Podemos incluir este método en cada modelo para el cuál vayamos a recuperar el valor del campo created_at o bien, incluirlo en un trait y usarlo en estos modelos.

Código del trait:


<?php

namespace App\Models\Traits;

use Carbon\Carbon;

trait CommonTrait
{

    public function getCreatedAtAttribute($value)
    {
        return Carbon::parse($value, 'Europe/Madrid')
            ->locale('ES')
            ->isoFormat('DD-MM-YYYY, HH:mm:ss');

    }
}

Modelos:


<?php

namespace App\Models;

use App\Models\Traits\CommonTrait;
use Illuminate\Database\Eloquent\Model;

class Message extends Model
{
    use CommonTrait;


    // ... 
}


<?php

namespace App\Models;

use App\Models\Traits\CommonTrait;
use Illuminate\Database\Eloquent\Model;


class Message extends Model
{
    use CommonTrait;

    // ... 
}

Desde ahora, cada vez que usemos el dato almacenado en el campo created_at a través de los modelos Eloquent "Tag" o "Message" tendrá el formato que le dimos en el accessor incluido en el trait de nombre "CommonTrait".

13-03-2021