Phalcon - Ngôn ngữ truy vấn

Ngôn ngữ truy vấn Phalcon (PHQL) còn được gọi là PhalconQL là một phương ngữ SQL cấp cao chuẩn hóa các truy vấn SQL cho các hệ thống cơ sở dữ liệu được Phalcon hỗ trợ.

Nó bao gồm một trình phân tích cú pháp, được viết bằng C, dịch cú pháp trong RDBMS đích.

Đây là danh sách một số tính năng nổi bật của ngôn ngữ truy vấn Phalcon -

  • Để bảo mật cho ứng dụng web, nó sử dụng các tham số ràng buộc.

  • Bảng được coi là mô hình trong khi cột được coi là thuộc tính lớp.

  • Tất cả các câu lệnh thao tác dữ liệu được sử dụng để ngăn ngừa mất dữ liệu có thể xảy ra.

  • Việc đưa vào SQL được ngăn chặn bằng cách duy trì lệnh gọi truy vấn SQL tại một thời điểm.

Tạo truy vấn PHQL

Các truy vấn được tạo bởi lớp khởi tạo Phalcon\Mvc\Model\Query.

Thí dụ

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

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

Trong các chương trước, chúng ta đã thấy hoạt động của ứng dụng web giàn giáo có tên là blog hướng dẫn. Nó bao gồm các danh mục tìm kiếm theo tên hoặc slug.

Sau đây là mã bao gồm cho 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); 
}

Truy vấn PHQL được thực thi (được đánh dấu) trong bộ điều khiển sẽ tìm nạp tất cả các kết quả theo điều kiện tìm kiếm. Kết quả của bất kỳ truy vấn tìm kiếm nào theo điều kiện sẽ được hiển thị như trong ảnh chụp màn hình.

Sau đây là kết quả nhận được khi thực hiện thành công đoạn mã trên.

Vòng đời PHQL

Là một ngôn ngữ cấp cao, PHQL cung cấp khả năng cho các nhà phát triển cá nhân hóa và tùy chỉnh các khía cạnh khác nhau theo yêu cầu.

Sau đây là vòng đời của mỗi câu lệnh PHQL được thực thi trong Phalcon:

  • Mỗi câu lệnh PHQL được phân tích cú pháp và chuyển đổi dưới dạng Biểu diễn trung gian (IR) hoàn toàn độc lập với SQL được thực thi bởi hệ thống cơ sở dữ liệu.

  • IR được chuyển đổi thành câu lệnh SQL theo hệ thống cơ sở dữ liệu được sử dụng trong ứng dụng web. Các câu lệnh SQL được tạo ra được liên kết với mô hình.

  • Tất cả các câu lệnh PHQL được phân tích cú pháp một lần và lưu vào bộ nhớ. Nếu cùng một kết quả câu lệnh được thực thi, nó sẽ giúp hiệu suất nhanh hơn.