【问题标题】:Laravel Nova metrics filteringLaravel Nova 指标过滤
【发布时间】:2019-02-01 19:03:34
【问题描述】:

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

【问题讨论】:

  • 不知道有没有简单的方法。但是你可以看看这个:github.com/beyondcode/nova-filterable-cards
  • 我之前看过。它接近我想要的,但我总是希望它被过滤而不是过滤选项。我真的不知道如何始终应用过滤器。
  • 我已经能够通过汇总活动来解决总数问题,但这不适用于趋势和分区。 return $this->sum($request, Property::class, 'active');

标签: laravel laravel-5 laravel-nova


【解决方案1】:

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

【讨论】:

  • 我一定是做错了什么。我已经按照您的编码设置了活动和非活动范围,只是它们是静态的。如果我让它们保持静态并使用 Property::active() 我得到'非静态方法 App\Property::active() 不应被静态调用,但 Property::where('active', 1) 工作得很好!谢谢!!
  • 您是否在活动方法名称前加上范围(scopeActive)?然后它应该可以从 laravel 静态调用,这是 laravel 长期以来所做的简单作用域。我用范围来做(因为我不想在我的 nova 文件中使用查询逻辑)并且没有问题
  • 是的,声明是'public static function scopeActive ($query) {'
  • 尝试从声明中删除静态,Laravel 中的作用域是用 'public function scropeSomething($query)' 定义的,如果你之前添加静态可能 Laravel 外观会吓坏(未经测试,只是一个想法)
猜你喜欢
  • 2019-03-28
  • 2021-02-01
  • 2021-01-26
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
相关资源
最近更新 更多