Laravel:在构造方法中访问模型属性

时间:2019-05-30 10:13:06

标签: laravel eloquent laravel-5.8

如何在laravel雄辩地使用__construct并获取属性。我很累:

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

我的代码返回null。但是在抽象类Model上填充了所有属性:

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

    $this->initializeTraits();

    $this->syncOriginal();

    $this->fill($attributes);
}

是否可以在构造方法中访问模型属性?

2 个答案:

答案 0 :(得分:0)

尝试使用accessors

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

将其定义为:

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

并使用$this->first_name这样的东西。

答案 1 :(得分:0)

我通过像这样更新构造函数在本地进行了测试:

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