Laravel получить частоту из колонки - PullRequest
0 голосов
/ 29 сентября 2018

Мне нужно получить наиболее часто используемый код (в примере) из столбца.Я пытаюсь этот код, но это не работает.

$count = Invoice::with('userinvoicesubaccount')->where('person_id',$id)
        ->pluck('codeinvoice');
$count = array_count_values($count);
$count = array_keys($count);
$element = $count[0];

Сначала я собираю список всех значений.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

В случае, если codeinvoice является атрибутом таблицы счетов-фактур, вы можете сделать что-то вроде следующего:

$count = Invoice::selectRaw('invoices.codeinvoice, count(invoices.codeinvoice) as ocurrences')
              ->where('person_id',$id)
              ->groupBy('codeinvoice');

Для каждой возвращаемой строки у вас будет код и количество вхожденийэтого кода.Исходя из этого, если вы хотите использовать только наиболее часто используемые, вы можете использовать order by и limit следующим образом:

$count = Invoice::selectRaw(invoices.codeinvoice, count(invoices.codeinvoice) as ocurrences')
              ->where('person_id',$id)
              ->orderBy('ocurrences', 'desc')
              ->groupBy('codeinvoice')
              ->limit(1);

Тогда только одна возвращенная строка будет наиболее часто используемым кодом.

Надеюсь, это то, что вы хотите.

0 голосов
/ 29 сентября 2018
// get available 'distinct' codes
$distinct_codes = Invoice::select('codeinvoice')->where('person_id', $id)
            ->groupBy('codeinvoice')
            ->pluck('codeinvoice');

// a collection which will hold count of each code against the code
$code_counts = collect();

// for each code get the number of rows
// and add to the collection
foreach ($distinct_codes as $code) {

     $code_counts->push(collect([
         'code' => $code,
         'count' => Invoice::where(
              ['person_id', $id],
              ['codeinvoice', $code]
         ])->count()
     ]));
}

// get the most used code from that collection
$most_used_code = $code_counts->max->count;
...