如何在Laravel中将带有访问器的属性正确地设置到模型中?

时间:2018-12-19 07:58:58

标签: php laravel

class Theme
{
    public function getNameAttribute()
    {
        return 'prefix-' . $this->id;
    }
}


$theme = Theme::find(1);

dump($theme->name); // "prefix-1"

$array = $theme->toArray();

dump($array) // ["id" => 1]

“名称”属性未出现在数组中,因此我必须添加以下代码(或在$theme->name = ''之前添加toArray()):

$array['name'] = $theme->name;

dump($array) // ["id" => 1, "name" => "prefix-1"]

return $array;

还有其他方法可以更优雅地做到这一点吗?

1 个答案:

答案 0 :(得分:3)

将属性添加到模型上的$appends变量中。

class Theme
{
    protected $appends = ['name'];

    public function getNameAttribute()
    {
        return 'prefix-' . $this->id;
    }
}

更多信息:https://laravel.com/docs/5.7/eloquent-serialization#appending-values-to-json