Laravel getAttribute未附加到模型

时间:2018-02-15 17:04:19

标签: php laravel

我在User.php模型中添加了一个访问者getArticlesCountAttribute

    protected $appends = ['articles_count'];

    public function getArticlesCountAttribute()
    {
        return (int) $this->articles()->count();
    }

但是当我从我的laravel刀片视图访问它时,文章计数数据库查询每次都在我的视图中使用访问者运行

例如:如果我的刀片视图中有Auth::user()->articles_count次3次,则会运行文章计数查询3次。

不应该在开头附加,查询应该只运行一次,无论我在视图中引用它多少次?

4 个答案:

答案 0 :(得分:2)

我认为你不应该缓存或存储它。它仍然是一个模型,模型不应该有这种实现。

您应该重新构建视图并将计数结果从控制器传递到视图。

public function myAction()
{
   return view('myview', [
      'articleCount' => Auth::user()->articles_count
   ]);
}

并且在视图中只有一次结果变量$ articleCount。

答案 1 :(得分:0)

试试这个代码

 protected $hidden = ['articles_count'];

public function getArticlesCountAttribute()
{
    return (int) $this->articles()->count();
}

答案 2 :(得分:-1)

您可以缓存它,例如:

protected $articlesCounted;

public function getArticlesCountAttribute()
{
    if (is_null($this->articlesCounted)) {
        return $this->articlesCounted = $this->articles()->count();
    }
    return $this->articlesCounted;        
}

答案 3 :(得分:-1)

您只需访问该属性,而不是方法:

protected $appends = ['articles_count'];

public function getArticlesCountAttribute()
{
    return (int) $this->articles->count();
}

这样如果没有加载文章,这将是第一次:)