руководство/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

Итак, мы рассмотрели все возможные способы построения условий выборки.

Предыдущий пункт | На главную | Следующий пункт