Je définis ma classe comme telle :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Foo extends Model
{
use HasFactory;
protected $fillable = [
'id', 'first_name'
];
public function getFirstNameAttribute($value = null)
{
return ucfirst($value);
}
}
Ensuite, je remplis ma base de données avec les données de ce modèle :
\App\Models\Foo::create(['first_name' => 'foo']);
J'appelle ensuite l'accesseur comme suit :
\App\Models\Foo::first()->first_name;
=> "Foo"
qui est attendue
et
\App\Models\Foo::first()->firstName;
=> ""
ce qui est inattendu (mais compréhensible car même si getFirstNameAttribute
est appelée, la propriété DB firstName
et qui n'existe pas)
Je voudrais m'assurer que, dans les deux cas, la propriété correcte ( first_name
).
Cela signifie-t-il que ($value = null)
n'est pas fiable et il faut toujours s'appuyer sur $this->attributes['first_name']
?
Ainsi, ce code devient :
public function getFirstNameAttribute($value = null)
{
return ucfirst($this->attributes['first_name']);
}
Bien que je m'attende probablement à ce que
>>> \App\Models\Foo::first()->first_____na______me;
=> "Foo"
de ne pas le faire.