10.3 Db
- 10.3.1 Объект соединения с БД
- 10.3.2 Генератор запросов
- 10.3.3 Criteria
10.3.1 Объект соединения с БД
10.3.2 Генератор запросов
Для генерации SQL-запросов в MZZ предназначен специальный класс simpleSelect. SimpleSelect собирает запрос из составных частей, которыми являются объекты классов criteria. Интерфейс у simpleSelect предельно простой: конструктор, принимающий объект класса criteria и метод simpleSelect::toString(), возвращающий сгенерированный запрос.
Рассмотрим пример генерации простейшего запроса:
$criteria = new criteria('table'); $select = new simpleSelect($criteria); echo $select->toString(); // выведет "SELECT * FROM `table`"
Как видите - генератор запросов сам позаботился о помещении имени таблицы в обратные кавычки (`). Аналогичным образом вам не нужно заботиться об одинарных кавычках ('), в которые помещаются строковые константы, и об экранировании этих строковых констант.
10.3.3 Criteria
Класс criteria служит для указания параметров выборки: полей, условий, объединений таблиц, группировки, итд. Сам по себе этот класс не используется нигде в приложениях, но он необходим как набор правил для генерации запроса с помощью класса simpleSelect.
Так как каждый из методов criteria возвращает ссылку на сам объект критерии - то вызовы методов можно выстраивать в цепочку для уменьшения объёма кода и улучшения читабельности. Это будет рассмотрено в примерах ниже.
Интерфейс criteria:
3.1 __construct
Указывает таблицу, для которой генерируется запрос.
__construct([string $table = null [,string $alias = null]])
$table |
имя таблицы |
$alias |
алиас |
3.2 select
Указывает выбираемые поля
criteria select(string $field [, string $alias = null])
$field |
имя поля |
$alias |
алиас |
$criteria = new criteria('table'); $criteria->select('field1'); $criteria->select('field2', 'alias'); $select = new simpleSelect($criteria); echo $select->toString(); // выведет "SELECT `field1`, `field2` AS `alias` FROM `table`"
Потому как метод select возвращает ссылку на объект критерии - можно сократить данный код:
$criteria = new criteria('table'); $criteria->select('field1')->select('field2', 'alias'); $select = new simpleSelect($criteria); echo $select->toString(); // выведет "SELECT `field1`, `field2` AS `alias` FROM `table`"
3.3 where
Указывает условия выборки
criteria where(string|criterion $field [, mixed $value = null [, int $comparison = criteria::EQUAL]])
$field |
имя поля либо объект criterion (todo ссылка на criterion) |
$value |
сравниваемое значение. В зависимости от условия тип может быть любым |
$comparison |
тип сравнения |
$criteria = new criteria('table'); $criteria->where('field', 'value', criteria::GREATER)->where('field2', 'value2'); $select = new simpleSelect($criteria); echo $select->toString(); // "SELECT * FROM `table` WHERE `table`.`field` > 'value' AND `table`.`field2` = 'value2'"
Доступные для использования типы сравнений:
EQUAL |
= |
NOT_EQUAL |
<> |
GREATER |
> |
LESS |
< |
GREATER_EQUAL |
>= |
LESS_EQUAL |
=< |
IN |
IN |
NOT_IN |
NOT IN |
LIKE |
LIKE |
NOT_LIKE |
NOT LIKE |
BETWEEN |
BETWEEN |
NOT_BETWEEN |
NOT BETWEEN |
FULLTEXT |
MATCH (%s) AGAINST (%s) |
FULLTEXT_BOOLEAN |
MATCH (%s) AGAINST (%s IN BOOLEAN MODE) |
IS_NULL |
IS NULL |
IS_NOT_NULL |
IS NOT NULL |
Для сравнений, в которых операнд "значение" состоит фактически из нескольких значений (Например: IN (1, 2, 3)) необходимо передавать массив этих значений.
Пример работы с такими сравнениями:
$criteria->where('field', array(1, 2, 3), criteria::IN); // `field` IN (1, 2, 3) $criteria->where('field', array(1, 2), criteria::BETWEEN); // `field` BETWEEN 1 AND 2 $criteria->where(array('field1', 'field2'), 'value', criteria::FULLTEXT); // MATCH(`field1`, `field2`) AGAINST ('value') $criteria->where('field', null, criteria::IS_NULL); // `field` IS NULL
3.4 orderByAsc, orderByDesc
Добавляет сортировку в запрос
criteria orderByAsc(string $field [, boolean $alias = true]), criteria orderByDesc(string $field [, boolean $alias = true])
$field |
имя поля |
$alias |
алиас |
$criteria = new criteria('table'); $criteria->select('field1'); $criteria->orderByAsc('field1'); $select = new simpleSelect($criteria); $select->toString(); // "SELECT `field1` FROM `table` ORDER BY `table`.`field1` ASC"