MZZ.Framework 1.0
Разделы

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"