Laravel Nova指标过滤

时间:2018-08-27 09:08:31

标签: laravel laravel-5 laravel-nova

我有一个名为Property的模型,该模型具有“ active”标志。我希望在资源顶部显示一个指标,以显示活动属性的数量。

我的calculate方法与文档中的完全相同,但这显示了所有属性,而不是活动属性:

public function calculate(Request $request)
{
    return $this->count($request, Property::class);
}

如何添加过滤器?

我尝试了where子句:

public function calculate(Request $request)
{
    return $this->count($request, Property::class)->where('active','=',1);
}

和查询范围:

public function calculate(Request $request)
{
    return $this->count($request, Property::class)->active();
}

我以为我也许可以使用在资源列表页面上设置的Nova过滤器,但这似乎也不起作用。我敢肯定这确实很容易,但是我还没有解决。感谢您的帮助!

1 个答案:

答案 0 :(得分:12)

您可以在$ model参数中使用每种类型的Eloquent \ Builder实例。

代替:

public function calculate(Request $request)
{
    return $this->count($request, Property::class);
}

在模型上设置范围

App\Property.php
...
public function scopeActive($query)
{
    return $query->where('active', 1);
}
public function scopeInactive($query)
{
    return $query->where('active', 0);
}

将此范围用作您的calculate方法中的$ model参数,因为该范围的调用会返回一个Eloquent \ Builder实例

public function calculate(Request $request)
{
    return $this->count($request, Property::active());
    // return $this->count($request, Property::inactive());
}

修改 当然,您可以使Eloquent Builder调用内联:

public function calculate(Request $request)
{
    return $this->count($request, Property::where('active', 1));
}