【问题标题】:Sort Laravel Nova partition results by the count按计数对 Laravel Nova 分区结果进行排序
【发布时间】:2018-08-27 11:20:57
【问题描述】:

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

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

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

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

【问题讨论】:

  • 显示更多代码和输出
  • 没有其他可显示的。其他一切都是标准的 Nova,这很棒,因为它很容易设置,但我不知道如何对输出进行排序。它以国家顺序出现。澳大利亚 (30 - 23.26%) 比利时 (1 - 0.78%) 保加利亚 (1 - 0.78%) 加拿大 (6 - 4.65%) 等
  • 试试return $this->count($request, Property::orderBy('country', 'desc'), 'country','country');
  • 这很有帮助,因为我不知道你能做到这一点,但它会对国家名称进行反向排序。我想要的是能够对计数进行降序排序,以便计数最高的国家/地区显示在顶部。
  • 对不起,我读得太快了。我相信该请求会在 select 语句中添加一个countries_count。所以你应该能够做到这一点:return $this->count($request, Property::orderBy('countries_count', 'desc'), 'country','country');

标签: laravel laravel-5 laravel-nova


【解决方案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();

【讨论】:

  • 如何在上面的查询中添加where子句?我想将 where('active', 1) 添加到以下查询 return $this->count($request, ContentLanguage::orderBy('aggregate', 'desc'), 'language_id', 'content_id')跨度>
  • 你试过Property::orderBy('aggregate', 'desc')->select( 'country', DB::raw("count(country) as aggregate") )->where('active', 1)->groupBy('country')->get();吗?
猜你喜欢
  • 2011-06-28
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 2017-08-28
相关资源
最近更新 更多