按计数对Laravel Nova分区结果进行排序

时间:2018-08-27 11:20:58

标签: laravel laravel-5 laravel-nova

我有一个带有Property模型的新Laravel Nova安装。属性的属性为“国家/地区”,我想在“国家/地区”列上显示分区指标。

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

所有作品都可以使用,但是只能按国家/地区的字母顺序排序,而不是按计数的顺序排序,这样更有意义。

有什么方法可以对输出进行排序?

1 个答案:

答案 0 :(得分:1)

您可以做的是:

public function calculate(Request $request)
{
    return $this->count($request, Property::orderBy('aggregate', 'desc'), 'country','country');
}

更多信息:
Nova将按照以下方式构建查询( nova/src/Metrics/Partition.php@aggregate ):

 $results = $query->select(
            $groupBy, DB::raw("{$function}({$wrappedColumn}) as aggregate")
        )->groupBy($groupBy)->get();
  • $query是模型Property::orderBy(...)的给定Builder实例,或者当您传递模型Property::class时Nova会为您创建它
  • $function将是方法(计数,最小,最大...)
  • $wrappedColumn将是给定的列(您所在的国家/地区)
  • $groupBy将按列(国家/地区)作为给定的分组...嗯,您就知道了

最后它将构建:

$results = Property::orderBy('aggregate', 'desc')->select(
            'country', DB::raw("count(country) as aggregate")
        )->groupBy('country')->get();