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!
php laravel eloquent
Commentami!