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

Dre*_*ter 4 laravel laravel-5 laravel-nova

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

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

所有作品,但它仅按国家/地区的字母顺序排序,而不是按照更有意义的计数进行排序。

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

cba*_*ier 5

你能做的是:

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

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

 $results = $query->select(
            $groupBy, DB::raw("{$function}({$wrappedColumn}) as aggregate")
        )->groupBy($groupBy)->get();
Run Code Online (Sandbox Code Playgroud)
  • $query是模型的给定 Builder 实例,Property::orderBy(...)或者 Nova 会在您传递模型时为您创建它Property::class
  • $function将是方法(计数、最小值、最大值...)
  • $wrappedColumn将是给定的列(您的情况是国家/地区)
  • $groupBy将是按列(国家/地区)给定的组...好吧,你明白了

最后它将构建:

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