аксессоры модели laravel не работают в laravel 5.8 - PullRequest
0 голосов
/ 23 сентября 2019

атрибут (полное имя в данном случае) не отображается при использовании User :: find (1);(который на самом деле возвращает пользовательский экземпляр) и dd ("test") внутри метода доступа также не называется

Я сделал dd'd модель с помощью тинкера, и я попытался использовать dd на $ request-> Выход user () возвращает то же самое.

class User extends Authenticatable
{
    use Notifiable,HasApiTokens;


    protected $hidden = [
       'id',
        'master_password',
        'remember_token',
        'provider',
        'provider_id',
        'created_at',
        'updated_at',
        'deleted_at'
    ];

    public function getFullNameAttribute()
    {
        dd("test");
        return "test";
    }

}

Я ожидаю, что атрибут пользователя с полем full_name, возвращающим "test".(или брось и умри, если ты впустишь дд.)

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Просто поместите это в вашу модель:

protected $appends = ['full_name'];

И он вызовет ваш getFullNameAttribute и добавит его по умолчанию.Он был введен специально для API.

0 голосов
/ 23 сентября 2019

Согласно документам laravel:

После добавления атрибута в список добавлений он будет включен как в массив модели, так и в формы JSON.Атрибуты в массиве добавления также будут учитывать видимые и скрытые параметры, настроенные для модели.

Атрибут test не появится в пределах $attributes, пока вы не вызовете toArray() или toJson()функции.

Массив атрибутов экземпляра User не является представлением массива класса User.

Если вы работаете с объектом User, вы можете получить атрибуты средства доступа, используя$ user-> test.

Если вы хотите получить массив или json-представление объекта User, верните его в виде массива / json $user->toArray() или $user->toJson() - теперь методы доступа включены в $appends массив будет автоматически включен.

Надеюсь, это поможет.

...