Phalcon - язык запросов
Язык запросов Phalcon (PHQL), также называемый PhalconQL - это диалект SQL высокого уровня, который стандартизирует запросы SQL для систем баз данных, поддерживаемых Phalcon.
Он включает синтаксический анализатор, написанный на C, который переводит синтаксис в целевой СУБД.
Вот список некоторых выдающихся особенностей языка запросов Phalcon:
Для безопасности веб-приложения используются связанные параметры.
Таблицы рассматриваются как модели, а столбцы - как атрибуты класса.
Все операторы обработки данных используются для предотвращения потери данных, которая может произойти.
SQL-инъекция предотвращается сохранением вызовов SQL-запросов по очереди.
Создание запроса PHQL
Запросы создаются путем создания экземпляра класса Phalcon\Mvc\Model\Query.
пример
// Instantiate the Query
$query = new Query(
"SELECT * FROM Users",
$this->getDI()
);
// Execute the query returning a result if any
$cars = $query->execute();
В предыдущих главах мы видели работу веб-приложения scaffold под названием blog tutorial. Он включал поисковые категории по имени или слагу.
Ниже приведен код для searchAction.
public function searchAction() {
$numberPage = 1;
if ($this->request->isPost()) {
$query = Criteria::fromInput($this->di, "Categories", $_POST);
$this->session->conditions = $query->getConditions();
} else {
$numberPage = $this->request->getQuery("page", "int");
if ($numberPage <= 0) {
$numberPage = 1;
}
}
$parameters = array();
if ($this->session->conditions) {
$parameters["conditions"] = $this->session->conditions;
}
// $parameters["order"] = "id";
$categories = Categories::find($parameters);
if (count($categories) == 0) {
$this->flash->notice("The search did not find any categories");
return $this->dispatcher->forward(array(
"controller" => "categories",
"action" => "index"
));
}
$paginator = new \Phalcon\Paginator\Adapter\Model(array(
"data" => $categories,
"limit"=> 10,
"page" => $numberPage
));
$page = $paginator->getPaginate();
$this->view->setVar("page", $page);
}
Запрос PHQL, выполненный (выделенный) в контроллере, получит все результаты в соответствии с условием поиска. Результат любого поискового запроса по условию будет отображаться как на скриншоте.
Ниже приведены результаты, полученные при успешном выполнении вышеуказанного кода.

Жизненный цикл PHQL
Являясь языком высокого уровня, PHQL предоставляет разработчикам возможность персонализировать и настраивать различные аспекты в соответствии с требованиями.
Ниже приведен жизненный цикл каждого оператора PHQL, выполняемого в Phalcon.
Каждый оператор PHQL анализируется и преобразуется как промежуточное представление (IR), которое полностью не зависит от SQL, реализованного системой базы данных.
IR преобразуется в оператор SQL в соответствии с системой базы данных, которая используется в веб-приложении. Сгенерированные операторы SQL связаны с моделью.
Все операторы PHQL анализируются один раз и кешируются в памяти. Если выполняется тот же результат оператора, это поможет повысить производительность.
