Laravel Nova 指标过滤

Laravel Nova metrics filtering

我有一个名为 属性 的模型,它有一个 'active' 标志。我想要在我的资源顶部有一个指标,它显示活动属性的数量。

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

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 过滤器,但那似乎也不起作用。我敢肯定这真的很容易,但我还没有解决。感谢您的帮助!

您可以在 $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);
}

并在你的计算方法中使用这个范围作为 $model 参数,因为范围 returns a Eloquent\Builder Instance

的调用
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));
}