如何在不是模型的类上实现getXAttribute

时间:2019-06-14 16:38:35

标签: php laravel

我有一个自定义类,该类对NAV服务器执行getItems()请求并返回一个数组。我能够收集($ array)并在其中使用所有收集功能,例如groupBy,但我似乎找不到找到使$ appends起作用的方法。 例如,我希望此类具有

public function getPriceAttribute(){
  return $this->customCollection->Unit_Price*100 . 'Euro';
}

我在网上找到的所有文档都与型号有关。我知道这是Model的事,但是如果没有数据库表就可以使它正常工作,因为所有数据都来自NavClient

谢谢

1 个答案:

答案 0 :(得分:2)

此功能在Model类中进行了编码,因此可能无法轻松地将其用于非模型。相反,您可以将相关代码复制到您的类中。

Laravel在__get() magic function中使用Model class。然后在HasAttributes特性中,依次选择checks for the existence of an mutator methodcalls the mutator

    public function hasGetMutator($key)
    {
        return method_exists($this, 'get'.Str::studly($key).'Attribute');
    }

    protected function mutateAttribute($key, $value = null)
    {
        return $this->{'get'.Str::studly($key).'Attribute'}($value);
    }

    public function __get($key)
    {
        if($this->hasGetMutator($key)) {
            return $this->mutateAttribute($key);
        }
    }

注意:仅当不存在带有请求名称的公共属性(在您的情况下为__get()时)才会调用price方法。

更新:其中有a Laravel Core Adventures video会更详细。