11

我有一个名为 Property 的模型,它有一个“活动”标志。我想在我的资源顶部有一个指标,显示活动属性的计数。

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

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

4

1 回答 1

31

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

编辑 当然,您可以使 Eloquent Builder 调用内联:

public function calculate(Request $request)
{
    return $this->count($request, Property::where('active', 1));
}
于 2018-08-27T11:54:01.880 回答