4.2 KiB
Класс ConditionGroup
Класс ConditionGroup
предназначен для группировки условий в SQL-запросах, позволяя комбинировать отдельные условия с
помощью логических операторов (AND
, OR
, NOT
, и т.д.) и формировать единое сложное выражение для использования в
запросах к базе данных.
Пространство имён
namespace goodboyalex\php_db_components_pack\classes;
Автор и версия
- Автор: Александр Бабаев
- Версия: 1.0
- Дата начала поддержки: с версии 1.0
Назначение
Класс ConditionGroup
позволяет группировать условия и соединять их логическим оператором, формируя составные условия
для SQL-запросов. Это особенно полезно, когда нужно объединить несколько простых условий в одно комплексное.
Важно
Все условия, входящие в ConditionGroup
должны быть объеденины одним единственным оператором. То есть, вот такое
условие не объединить в ConditionGroup
:
(условие 1 AND условие 2 OR условие 3)
Для реализации такого условия, какие-то из условий должны быть заключены в подгруппу.
Основные методы класса
-
Конструктор (
__construct
)
Создаёт объект группы условий с возможностью указания логического оператора и самих условий. -
Формирование условий (
GetConditions
)
Формирует итоговую группу условий в виде пары: SQL-строка и массив параметров для безопасной передачи в запрос. -
Количество условий (
Count
)
Возвращает количество условий в группе.
Пример использования
Допустим, у вас есть две группы условий: первая группа ищет пользователей от 18 и до 45 лет, вторая — пользователей с
правами администратора или модератора. Вы хотите объединить эти условия с помощью оператора OR
:
use goodboyalex\php_components_pack\Condition;
use goodboyalex\php_components_pack\ConditionGroup;
// Первая группа условий: пользователи от 18 до 45 лет
$group1 = new ConditionGroup(Condition::LOGIC_AND, [
new Condition('age', '>=', 18),
new Condition('age', '<=', 45)
]);
// Вторая группа условий: администраторы
$group2 = new ConditionGroup(Condition::LOGIC_OR, [
new Condition('role', '=', 'admin'),
new Condition('role', '=', 'moderator')
]);
// Объединяем обе группы с оператором OR
$combinedGroup = new ConditionGroup(Condition::LOGIC_OR, [
$group1,
$group2
]);
Группа $combinedGroup
равносильна такому ограничению:
((`age` >= 18) AND (`age` <= 45)) OR ((`role`='admin') OR (`role`='moderator'))
Принцип работы
Класс ConditionGroup
собирает отдельные условия в группы и соединяет их с помощью логических операторов. Затем с
помощью метода GetConditions
формируются готовые SQL-условия, подходящие для встраивания в запрос с поддержкой
механизма подставляемых параметров (placeholders), что обеспечивает защиту от SQL-инъекций.