Phalcon Query Language (PHQL), также называемый PhalconQL, является высокоуровневым диалектом SQL, который стандартизирует запросы SQL для систем баз данных, поддерживаемых Phalcon.
Он включает в себя синтаксический анализатор, написанный на C, который транслирует синтаксис в целевой RDBMS.
Вот список некоторых выдающихся особенностей языка запросов Phalcon:
-
Для безопасности веб-приложения оно использует связанные параметры.
-
Таблицы обрабатываются как модели, а столбцы — как атрибуты класса.
-
Все операторы манипулирования данными используются для предотвращения потери данных, которая может произойти.
-
Внедрение SQL предотвращается сохранением вызова SQL-запроса по одному.
Для безопасности веб-приложения оно использует связанные параметры.
Таблицы обрабатываются как модели, а столбцы — как атрибуты класса.
Все операторы манипулирования данными используются для предотвращения потери данных, которая может произойти.
Внедрение 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 под названием блог-учебник. Это включало поиск категорий по имени или слагу.
Ниже приведен код, включенный для 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 анализируются один раз и кэшируются в памяти. Если выполняется тот же результат оператора, это поможет повысить производительность.