Laravel: Доступ к атрибутам модели в методе конструктора - PullRequest
0 голосов
/ 30 мая 2019

Как использовать __construct на laravel eloquent и получить атрибуты.Я устал:

public function __construct() {
    parent::__construct();
    dd($this->attributes);
}

Мой код возвращает ноль.Но в абстрактном классе Model заполнены все атрибуты:

public function __construct(array $attributes = [])
{
    $this->bootIfNotBooted();

    $this->initializeTraits();

    $this->syncOriginal();

    $this->fill($attributes);
}

Возможно ли получить доступ к атрибутам модели в методе конструктора?

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Я проверил это локально, обновив конструктор следующим образом:

public function __construct(array $attributes = []) {
    parent::__construct($attributes);
    dd($this->getAttributes());
}

Однако я обнаружил, что при извлечении объекта из базы данных его атрибуты не заполняются в конструкторе, и, следовательно, там невозможно получить к ним доступ.

Что вы можете сделать, это получить доступ к атрибутам после инициализации объекта:

$post = Post::find(1);
dump($post->getAttributes());

Не уверен, поможет ли это, но это то, что есть.

Может быть, события или наблюдатели могут помочь вам с тем, что вам нужно: https://laravel.com/docs/5.8/eloquent#events
https://laravel.com/docs/5.8/eloquent#observers

0 голосов
/ 30 мая 2019

Попробуйте с accessors.

https://laravel.com/docs/5.8/eloquent-mutators#accessors-and-mutators

Определите его следующим образом:

public function getFirstNameAttribute($value)
{
     return ucfirst($value);
}

И используйте $this->first_name как-то так.

...