Закажите бесплатную презентацию продуктов РосБизнесСофт прямо сейчас!
Класс 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.
Где:
Создает запрос типа SELECT (выбор записей из таблицы).
Где:
Создает запрос типа UPDATE (изменение записей в таблице).
Создает запрос типа INSERT (добавление записей в таблицу).
Создает запрос типа DELETE (удаление записей из таблицы).
Методы, принимающие на вход тип Condition, всегда могут также принять строку с условием (например, «id=5»). Подробности смотрите в разделе с описанием класса Condition ниже.
INNER JOIN.
Где:
LEFT JOIN.
Где:
RIGHT JOIN.
Где:
Добавить условие WHERE.
Где:
Добавить условие HAVING
Где:
Внимание: следующие функции принимают в качестве входных аргументов тип Column. Это значит, что им можно передавать не только строку с названием поля и сам объект типа Field, но также функцию и даже другой запрос. Соответствующие конструкторы будут вызваны автоматически. Подробности смотрите в разделе с описанием класса Column.
Получить поле (для запросов SELECT). По умолчанию берутся все поля, однако если присутствует вызов этого метода, добавляются только указанные.
Где:
Установить значение поля (подходит для UPDATE и INSERT запросов).
Где:
Группировать по полю
Где:
Упорядочить по полю.
Где:
Ограничивает количество строк, с которыми оперирует запрос.
Где:
Выполняет функцию DB и возвращает либо Null либо result field data.
Например:
$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;
Начало транзакции.
Применить транзакцию.
Вернуть прежнее состояние. До начала транзакции.
Пример:
$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 (см. ниже).
Где:
Вернет: если есть хоть какой-то результат, то вернет PDOStatment(fetch, fetchAll). Если DB result не будет — вернется Null. Подключать: use Kernel\Database\Database as DB;
Вернет: Eсли есть хоть какой-то результат, то вернет PDOStatment(execute). Если DB result не будет — вернется Null. Подключать: use Kernel\Database\Database as DB;
Получает копию созданного запроса, не выполняя его. Это полезно для создания подзапросов.
Представление таблицы.
Где:
Представление пары ключ-значение (при передачи строк конструкторы вызываются автоматически).
Где:
Представление условия.
Где:
Существует также краткий синтаксис запросов. Для этого вызовите статический метод с названием операции и передайте ему соответствующие аргументы (Database::_equal, Database::_like и т. д.). К тому же, любому методу, принимающему на вход объект типа Condition (за исключением конструктора этого объекта) можно передать строку с выражением в формате {OPERAND}{OPERATION}{OPERAND} (number>5, id=3 и т. д.).
Представление колонки (поля).
Где:
Представление функции.
Где:
Представление поля.
Где:
Результат запроса (INSERT, UPDATE, DELETE).
Успешно ли был выполнен запрос.
Вернуть добавленный ID (для запроса INSERT).
Вернуть результат или сообщение об ошибке.
Результат запроса с данными (SELECT). Этот класс является итерируемым. Это значит, что можно использовать его как массив: обращаться к его элементам по индексу, передавать его оператору foreach и т.д.
Вернуть строку с данными.
Где:
Подробнее про использование класса см. в разделе «Отчеты».
С примерами работы класса можно ознакомиться в разделе «Отчеты» по этой ссылке.