private function jqSearchQuery()
    {
        $searchFilters = ($filters = \Input::get('filters')) ? $filters : null;

        // not valid search filter
        if (!($searchFilters != null) || (!isset($searchFilters['rules'])) || (!is_array($searchFilters['rules']))) {
            return $this;
        }

        $this->setJqGridQuery($this->jqGridQuery->where(function ($query) use ($searchFilters) {
            foreach ($searchFilters['rules'] as $rule) {
                $field = $this->getJqSearchField($rule['field']);

                if (is_array($field)) {
                    $raw = 'CONCAT(';
                    $count = 0;
                    foreach ($field as $f) {
                        if (!$this->isExcluded($f)) {
                            $raw .= ($count) ? ',' : '';
                            $raw .= "{$f}";
                            $count++;
                        }
                    }
                    $raw .= ')';

                    $data = str_replace(' ', '', $rule['data']);
                    $data = str_replace(',', '', $data);
                    $rArr = str_split($data);

                    $rImp = implode('%', $rArr);
                    $query->orWhere(\DB::raw($raw), 'LIKE', "%{$rImp}%");
                } elseif ($field) {
                    if (!$this->isExcluded($field)) {
                        $query->orWhere($field, 'LIKE', "%{$rule['data']}%");
                    }
                }
            }
        }));

        return $this;
    }