Сортировка результатов Laravel Nova по количеству - PullRequest
0 голосов
/ 27 августа 2018

У меня новая установка Laravel Nova с моделью Property.Свойства имеют атрибут «страна», и я хочу показать метрику раздела в столбце «страна».

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

Все работает, но сортирует только по алфавиту по стране, а не по убыванию, что будет иметь больше смысла.

Есть ли способ отсортировать вывод?

1 Ответ

0 голосов
/ 28 августа 2018

Что вы можете сделать, это:

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();
...