2

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

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

所有的作品,但它只按国家的字母顺序排序,而不是按计数递减更有意义。

有没有办法对输出进行排序?

4

1 回答 1

2

你可以做的是:

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是您模型的给定 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();
于 2018-08-28T12:12:04.157 回答