Поиск

Функция поиска автоматически превращает входящие переменные в условия, используемые для фильтрации данных в SQL-запросе.
Вы можете полностью отключить стандартный поиск на стороне сервера, указав в методе init:

$this->do_search = false;

Принцип работы

Для входящих переменных, названия которых совпадают с названиями колонок в colModel, вызываются соответствующие операторы поиска.
Оператор поиска - это функция, которая собирает SQL-выражение для последующей подстановки в условие (WHERE).

Пустые строки - игнорируются.
Ноль (0) - НЕ игнорируется.

Операторы поиска

Оператор поиска задается при помощи опции search_op.
Если оператор явно не задан, то система пытается определить его самостоятельно.

Стандартные операторы поиска:

Оператор Описание Пример ответа
ignore Колонка не участвует в поиске. Входящая переменная с именем колонки игнорируется.
equal Полное совпадение. name = 'Kate'
like Частичное совпадение подстроки. name LIKE '%oh%'
numeric Поиск по числам, с дополнительной возможностью задать префикс-оператор перед значением.
Примеры входящих значений: '>0.6', '>=15', '<>2', '14'
Отлично работает вместе с функцией filterToolbar.
discount > '0.6'
price >= 15
quantity <> 2
id = 14

Добавление оператора поиска

Вы можете создать свой оператор поиска.
Для этого необходимо добавить функцию с именем searchOp{Оператор}

Функция принимает два аргумента:

  1. полную информацию о колонке, по которой идет поиск
  2. значение для поиска (уже SQL безопасное)

Функция должна вернуть строку с SQL-выражением.

Пример добавления оператора поиска ANY для массивов в PostgreSQL:

protected function searchOpAny($c, $val)
{
    return "'$val' = ANY({$c['db']})"; // 'Kate' = ANY(names)
}

Влияние на SQL запрос

Собранные выражения объединяются строкой, хранящейся в переменной where_glue ('AND' или 'OR') и подставляются в placeholder {where} при сборке SQL запросов. Если вам необходима более сложная логика сборки условий - перегрузите функцию buildWhere.


На других языках