3 votes

Des accesseurs et des noms de propriétés éloquents

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X