Accessors e mutators in Eloquent

Mattepuffo's logo
Accessors e mutators in Eloquent

Accessors e mutators in Eloquent

Gli accessors e mutators in Eloquent ci permettono di "trasformare" i valori che ci arrivano da database in modo da poterli visualizzare come ci serve.

Come regola le funzioni devono avere gli stessi nomi dei campi.

Poi l'unica differenza è che gli accessors agiscono in get, mentre i muitators in set.

Comunque non fanno nessuna modifica ai valori su db (fino a che non facciamo noi un'operazione ovviamente).

Spiegato così è un pò confusionario, quindi farei un esempio partendo dal model:

namespace App\Models;

use Illuminate\Database\Eloquent\Casts\Attribute;
use Illuminate\Database\Eloquent\Model;

class Persona extends Model {

  protected $fillable = [
      'nome',
      'email',
  ];

  protected function nome(): Attribute {
    return Attribute::make(
        get: fn(string $value) => ucfirst($value),
    );
  }

  protected function email(): Attribute {
    return Attribute::make(
        set: fn(string $value) => strtolower($value),
    );
  }

}

Nel nostro controller per fare dei test possiamo fare banalmente così:

namespace App\Http\Controllers;

use App\Models\Persona;

class TestController extends Controller {

  public function index(): String {
    $persona = new Persona([
        'nome' => 'nome',
        'email' => 'EMAIL@EMAIL.com',
    ]);

    return $persona->nome . ' - ' . $persona->email;
  }

}

Non facciamo query in questo caso, ma il concetto è lo stesso.

Sulla pagina vi ritroverete il nome con la prima maiuscola, e l'email tutta minuscola.

Date un'occhiata alla documentazione per vedere tutte le altre possibilità

Enjoy!


Condividi

Commentami!