首页 文章

Laravel Nova指标过滤

提问于
浏览
2

我有一个名为Property的模型,它有一个'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过滤器,但这似乎也不起作用 . 我确信这很容易,但我还没有解决 . 谢谢你的帮助!

1 回答

  • 6

    您可以在$ 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参数,因为范围的调用返回Eloquent \ Builder实例

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

    Edit 当然,您可以将Eloquent Builder内联调用:

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

相关问题