我在User.php模型中添加了一个访问者getArticlesCountAttribute
protected $appends = ['articles_count'];
public function getArticlesCountAttribute()
{
return (int) $this->articles()->count();
}
但是当我从我的laravel刀片视图访问它时,文章计数数据库查询每次都在我的视图中使用访问者运行
例如:如果我的刀片视图中有Auth::user()->articles_count
次3次,则会运行文章计数查询3次。
不应该在开头附加,查询应该只运行一次,无论我在视图中引用它多少次?
答案 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();
}
这样如果没有加载文章,这将是第一次:)