8 (800) 302-62-68
+7 (499) 348-29-58
sale@rbs-crm.ru

Документация разработчика

Класс Database

Класс Database используется для работы с данными, в т.ч. для построения отчетов в Системе.

Подключение класса:

use Kernel\Database\Database as DB;

Методы, определяющие тип запроса, должны быть вызваны первыми в конструкторе, сразу после указания названия таблицы:

$consignments = Kernel::Database()->{"documents.consignment.products"}->select(
           DB::Field("number", "documents.consignment.products"),
           DB::Field("storehouse", "documents.consignment"),
           DB::Field("id", "documents.consignment")
       )->execute(DATA_NAMES)->result();
QueryBuilder __get (string $tableName)

Инициализирует запрос к таблице. Возвращает объекта типа QueryBuilder.

Где:

  • tableName — Имя таблицы.
select ([string $field, …])

Создает запрос типа SELECT (выбор записей из таблицы).

Где:

  • field — Название получаемого поля.
    Внимание: если ничего не указано, из таблицы берутся все имеющиеся поля. Никакие синонимы при этом не применяются (это следует особо учесть при использовании флага $dataNames, см. ниже).
update ()

Создает запрос типа UPDATE (изменение записей в таблице).

insert()

Создает запрос типа INSERT (добавление записей в таблицу).

delete()

Создает запрос типа DELETE (удаление записей из таблицы).

Методы, принимающие на вход тип Condition, всегда могут также принять строку с условием (например, «id=5»). Подробности смотрите в разделе с описанием класса Condition ниже.

join(string $table, [string $on])

INNER JOIN.

Где:

  • table — Имя таблицы
  • on — Условие
leftJoin (string $table, [string $on])

LEFT JOIN.

Где:

  • table — Имя таблицы
  • on — Условие
rightJoin (string $table, [string $on])

RIGHT JOIN.

Где:

  • table — Имя таблицы
  • on — Условие
where (string $condition, …)

Добавить условие WHERE.

Где:

  • condition — Условие
having (string $condition, …)

Добавить условие HAVING

Где:

  • condition — Условие

Внимание: следующие функции принимают в качестве входных аргументов тип Column. Это значит, что им можно передавать не только строку с названием поля и сам объект типа Field, но также функцию и даже другой запрос. Соответствующие конструкторы будут вызваны автоматически. Подробности смотрите в разделе с описанием класса Column.

get (string $field, …)

Получить поле (для запросов SELECT). По умолчанию берутся все поля, однако если присутствует вызов этого метода, добавляются только указанные.

Где:

  • field — Поле
set (array $pair, …)

Установить значение поля (подходит для UPDATE и INSERT запросов).

Где:

  • pair — Пара ключ-значение
group (string $field, …)

Группировать по полю

Где:

  • field — Поле
order (string $field, …)

Упорядочить по полю.

Где:

  • field — Поле
limit (int $max, [int $startIndex])

Ограничивает количество строк, с которыми оперирует запрос.

Где:

  • max — Максимальное количество результатов (первые)
  • startIndex — Начальный индекс (начиная с)
getDBFunctionResult (string $structureName, string $functionName, string $fieldFunction, [Array $where = []],[boolean $isDataNames = true])

Выполняет функцию DB и возвращает либо Null либо result field data.

  • structureName — Название структуры или таблицы
  • functionName — Название SQL функции
  • fieldFunction — Поле над которым выполняется функция
  • where — массив where
  • isDataNames — выполнять подмену NAMES FIELDS

Например:

$plus = $this->getDBFunctionResult("documents.payment_orders", "MAX", "total", ["desk=" . $desk->id, "visible=1", "direction=1"]);

Результат:

Если есть хоть какой-то результат, то вернет 0 или максимальное значение. Если DB result не будет — вернется Null.

Эта функция есть и в базовом Action. Если Ваш Action унаследован от базового, то можете просто вызвать $this->getDBFunctionResult(…). Она сделает тоже самое, только не надо использовать и подключать use Kernel\Database\Database as DB;

beginTransaction()

Начало транзакции.

commit()

Применить транзакцию.

rollBack()

Вернуть прежнее состояние. До начала транзакции.

Пример:

$this->DB->beginTransaction();
try {
    //insert's
    //delete's
    //update's
    //OOops error -> generate throw exception for rollBack

 $this->DB->commit();
} catch (\Exception $e){
    $this->DB->rollBack();
}
Result и DataResult execute (bool $dataNames)

Выполняет созданный запрос, возвращая результатом объект типа Result или DataResult (см. ниже).

Где:

  • dataNames — Использовать ли название структур данных вместо названия таблиц. По умолчанию выключено.
getQ (string $sql, bool $isOne[false], bool $isTrhowable[false])
  • sql — SQL запрос
  • isOne — Одна запись или список. По умолчанию список
  • isTrhowable — Если выставлен true, то в случае ошибки вызывается Trhowable, иначе die.

Вернет: если есть хоть какой-то результат, то вернет PDOStatment(fetch, fetchAll). Если DB result не будет — вернется Null. Подключать: use Kernel\Database\Database as DB;

getE (string $sql, bool $isTrhowable[false])
  • sql — SQL запрос
  • isTrhowable — Если выставлен true, то в случае ошибки вызывается Trhowable, иначе die

Вернет: Eсли есть хоть какой-то результат, то вернет PDOStatment(execute). Если DB result не будет — вернется Null. Подключать: use Kernel\Database\Database as DB;

getQuery()

Получает копию созданного запроса, не выполняя его. Это полезно для создания подзапросов.

Класс Table

Представление таблицы.

__construct (string $name, [string $alias])

Где:

  • name — Название таблицы.
  • alias — Краткое имя таблицы в данном запросе.

Класс Pair

Представление пары ключ-значение (при передачи строк конструкторы вызываются автоматически).

__construct (string $field, string $value)

Где:

  • field — Поле
  • value — Значение

Класс Condition

Представление условия.

__construct ($left, const (IS_EQUAL,IS_LESS,IS_MORE,IS_NULL,IS_AND,IS_OR,IS_LIKE,IS_IN) $operation, $right, bool $invert)

Где:

  • left — Левый операнд.
  • operation — Код операции.
  • right — Правый операнд.
  • invert — Инверсия значения (NOT).

Существует также краткий синтаксис запросов. Для этого вызовите статический метод с названием операции и передайте ему соответствующие аргументы (Database::_equal, Database::_like и т. д.). К тому же, любому методу, принимающему на вход объект типа Condition (за исключением конструктора этого объекта) можно передать строку с выражением в формате {OPERAND}{OPERATION}{OPERAND} (number>5, id=3 и т. д.).

Класс Column

Представление колонки (поля).

__construct (string $content, [string $alias], [bool $stringAsValue])

Где:

  • content — Содержимое колонки.
  • alias — Название колонки в выводе.
  • stringAsValue — Обращаться со строкой как со значением, а не с названием поля. По умолчанию, false.

Класс DBFunction

Представление функции.

__construct (string $name, $argument, …)

Где:

  • name — Название функции
  • argument — Аргумент функции

Класс Field

Представление поля.

__construct (string $name, string $table)

Где:

  • name — Название
  • table — Таблица

Класс Result

Результат запроса (INSERT, UPDATE, DELETE).

bool isSuccessful()

Успешно ли был выполнен запрос.

int getId ()

Вернуть добавленный ID (для запроса INSERT).

string result ()

Вернуть результат или сообщение об ошибке.

Класс DataResult

Результат запроса с данными (SELECT). Этот класс является итерируемым. Это значит, что можно использовать его как массив: обращаться к его элементам по индексу, передавать его оператору foreach и т.д.

result (int $num)

Вернуть строку с данными.

Где:

  • num — Порядковый номер строки

Подробнее про использование класса см. в разделе «Отчеты».

С примерами работы класса можно ознакомиться в разделе «Отчеты» по этой ссылке.