руководство/4. Подготовка условий для выборки данных.md
Подготовка условий для выборки данных
Итак, в прошлой статье мы наполнили таблицу users данными. Однако, прежде чем мы будем получать данные, нам нужно подготовить условия выборки.
Для этого мы будем использовать класс ConditionBuilder. Давайте рассмотрим его методы:
Статический метод parse.
public static function parse(array $conditions): ConditionBuilder
- Назначение: создание объекта построителя условий из массива условий
- Параметр:
$conditions— массив условий запроса
- Возвращаемое значение: объект ConditionBuilder
- Пример использования:
$conditions = [
"id" => 1,
'AND',
"age" => ['>=', 18],
'OR',
"profile" => ['<=', 12],
'AND',
['AND', "Name" => "Alex", ['OR', "Age" => ['>', 18], "FirstName" => "Titanic"]]
];
$builder = ConditionBuilder::parse($conditions);
Метод reset
public function reset(): ConditionBuilder
- Назначение: сброс состояния объекта
- Возвращаемое значение: текущий объект ConditionBuilder
Метод build
public function build(): Tuple
- Назначение: сборка условия в формате, пригодном для SQL
- Возвращаемое значение: кортеж (Tuple), содержащий:
- строку условия
- массив параметров для защиты от SQL-инъекций
Метод __toString
public function __toString(): string
- Назначение: возвращает строковое представление объекта
- Особенности:
- представление не безопасно для SQL-запросов
- предназначено только для отладки
- может содержать SQL-инъекции
Метод count
public function count(): int
- Назначение: возвращает количество условий в цепочке
- Возвращаемое значение: целое число
Добавление базовых условий
За добавление условий отвечает методы:
# Добавление условия, группы или оператора
public function add(ConditionOperator|Condition|ConditionGroup $condition): ConditionBuilder
# Добавление условия по ключу, оператору связки и значению
public function addCondition(string $key, ConditionOperator $operator, mixed $value): ConditionBuilder
# Добавление группы условий
public function addGroup(ConditionOperator $operator, array $conditions): ConditionBuilder
Операторы сравнения
Каждый оператор сравнения возвращает объект ConditionBuilder, что позволяет продолжать цепочку условий.
# key = value
public function whereEquals(string $key, mixed $value): ConditionBuilder
# key != value
public function whereNotEquals(string $key, mixed $value): ConditionBuilder
# key > value
public function whereGreater(string $key, mixed $value): ConditionBuilder
# key >= value
public function whereGreaterOrEqual(string $key, mixed $value): ConditionBuilder
# key < value
public function whereLess(string $key, mixed $value): ConditionBuilder
# key <= value
public function whereLessOrEqual(string $key, mixed $value): ConditionBuilder
# key LIKE value
public function whereLike(string $key, string $value): ConditionBuilder
# key BETWEEN fromValue AND toValue
public function whereBetween(string $key, mixed $fromValue, mixed $toValue): ConditionBuilder
# key NOT BETWEEN fromValue AND toValue
public function whereNotBetween(string $key, mixed $fromValue, mixed $toValue): ConditionBuilder
# key IN (value1, value2, ...)
public function whereIn(string $key, array $values): ConditionBuilder
# key NOT IN (value1, value2, ...)
public function whereNotIn(string $key, array $values): ConditionBuilder
# key IS NULL
public function whereNull(string $key): ConditionBuilder
# key IS NOT NULL
public function whereNotNull(string $key): ConditionBuilder
Логические операторы
# Логическое И
public function logicAnd(): ConditionBuilder
# Логическое ИЛИ
public function logicOr(): ConditionBuilder
# Логическое НЕ
public function logicNot(): ConditionBuilder
# Логическое Исключающее ИЛИ
public function logicXor(): ConditionBuilder
# Логическое NAND
public function logicNand(): ConditionBuilder
# Логическое NOR
public function logicNor(): ConditionBuilder
Например, нам нужно получить всех пользователей сервиса mail.ru. Для этого мы можем использовать метод whereLike.
$where = new ConditionBuilder()->whereLike('user_mail', '%@mail.ru');
При использовании этого метода мы получим следующее условие: user_mail LIKE '%@mail.ru', что при выборке даст нам таблицу:
| id | user_name | user_mail |
|---|---|---|
| 3 | Oleg | oleg@mail.ru |
Итак, мы рассмотрели все возможные способы построения условий выборки.