Как отфильтровать поля по "LIKE" и подсчитать результаты в этой диаграмме Laravel? - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь исправить панель инструментов, где у меня есть несколько виджетов, показывающих мне, сколько билетов у меня уже есть, но фильтруется по столбцу с именем status (статус - строка типа в ожидании , преобразовал , остановлено и т. д.) в таблицу с именем chamados.

Я попытался поместить множество комбинаций ->where('status', 'like', '%finished') во многие части этого кода,но не имеют успеха. Может ли кто-нибудь помочь мне показать мне, как фильтровать такую ​​информацию?

Это код в контроллере:

$settings5 = [
    'chart_title'           => 'Chamados pendentes',
    'chart_type'            => 'number_block',
    'report_type'           => 'group_by_date',
    'model'                 => 'App\\Chamado',
    'group_by_field'        => 'prazo',
    'group_by_period'       => 'day',
    'aggregate_function'    => 'count',
    'filter_field'          => 'created_at',
    'group_by_field_format' => 'd-m-Y H:i:s',
    'column_class'          => 'col-md-3',
    'entries_number'        => '5', 
];

$settings5['total_number'] = 0;

if (class_exists($settings5['model'])) {
    $settings5['total_number'] = $settings5['model']::when(isset($settings5['filter_field']), function ($query) use ($settings5) {
        if (isset($settings5['filter_days'])) {
            return $query->where($settings5['filter_field'], '>=', now()->subDays($settings5['filter_days'])->format('Y-m-d'));
        } elseif (isset($settings5['filter_period'])) {
            switch ($settings5['filter_period']) {
                case 'week':
                    $start = date('Y-m-d', strtotime('last Monday'));
                    break;
                case 'month':
                    $start = date('Y-m') . '-01';
                    break;
                case 'year':
                    $start  = date('Y') . '-01-01';
                    break;
            }
            if (isset($start)) {
                return $query->where($settings5['filter_field'], '>=', $start);
            }
        }
    })
    ->{$settings5['aggregate_function'] ?? 'count'}($settings5['aggregate_field'] ?? '*');
}

Это мой взгляд:

<div class="{{ $settings5['column_class'] }}">
  <div class="info-box">
    <span class="info-box-icon bg-yellow" style="display:flex; flex-direction: column; justify-content: center;">
      <i class="fa fa-question-circle-o"></i>
    </span>
    <div class="info-box-content">
      <span class="info-box-text">{{ $settings5['chart_title'] }}</span>
      <span class="info-box-number">{{ number_format($settings5['total_number']) }}</span>
    </div>
  </div>
</div>

ВВ этом примере я должен показать количество билетов "Pendentes" (в ожидании на португальском языке). Может кто-нибудь объяснить мне, что я делаю неправильно и как это сделать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...