Phalcon - Query Language

Phalcon Query Language (PHQL) chiamato anche come PhalconQL è un dialetto SQL di alto livello che standardizza le query SQL per i sistemi di database supportati da Phalcon.

Include un parser, scritto in C, che traduce la sintassi in RDBMS di destinazione.

Ecco un elenco di alcune delle caratteristiche principali del linguaggio di query Phalcon:

  • Per la sicurezza dell'applicazione web, utilizza parametri associati.

  • Le tabelle vengono trattate come modelli mentre le colonne vengono trattate come attributi di classe.

  • Tutte le istruzioni di manipolazione dei dati vengono utilizzate per prevenire la perdita di dati che può verificarsi.

  • L'iniezione di SQL viene impedita mantenendo una chiamata di query SQL alla volta.

Creazione di una query PHQL

Le query vengono create istanziando la classe Phalcon\Mvc\Model\Query.

Esempio

// Instantiate the Query 
$query = new Query( 
   "SELECT * FROM Users", 
   $this->getDI() 
);  

// Execute the query returning a result if any 
$cars = $query->execute();

Nei capitoli precedenti, abbiamo visto il funzionamento dell'applicazione web scaffold denominata blog tutorial. Comprendeva la ricerca di categorie in base al nome o allo slug.

Di seguito è riportato il codice incluso per 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); 
}

La query PHQL eseguita (evidenziata) nel controller recupererà tutti i risultati secondo la condizione di ricerca. Il risultato di qualsiasi query di ricerca in base alle condizioni verrà visualizzato come nello screenshot.

Di seguito è riportato l'output ricevuto in caso di corretta esecuzione del codice precedente.

Ciclo di vita di PHQL

Essendo un linguaggio di alto livello, PHQL offre la possibilità agli sviluppatori di personalizzare e personalizzare vari aspetti secondo i requisiti.

Di seguito è riportato il ciclo di vita di ogni istruzione PHQL eseguita in Phalcon:

  • Ogni istruzione PHQL viene analizzata e convertita come una rappresentazione intermedia (IR) che è completamente indipendente dall'SQL implementato dal sistema di database.

  • L'IR viene convertito in un'istruzione SQL secondo il sistema di database utilizzato nell'applicazione web. Le istruzioni SQL generate sono associate al modello.

  • Tutte le istruzioni PHQL vengono analizzate una volta e memorizzate nella cache. Se viene eseguito lo stesso risultato dell'istruzione, sarà utile per prestazioni più veloci.