Phalcon-query-language

提供:Dev Guides
移動先:案内検索

Phalcon-クエリ言語

Phalcon Query Language(PHQL)は PhalconQL とも呼ばれ、PhalconがサポートするデータベースシステムのSQLクエリを標準化する高レベルのSQLダイアレクトです。

Cで記述されたパーサーが含まれており、ターゲットRDBMSの構文を変換します。

ここにPhalconクエリ言語の顕著な特徴のいくつかのリストがあります-

  • Webアプリケーションのセキュリティのために、バインドされたパラメーターを使用します。
  • テーブルはモデルとして扱われ、列はクラス属性として扱われます。
  • すべてのデータ操作ステートメントは、発生する可能性のあるデータの損失を防ぐために使用されます。
  • SQLインジェクションは、SQLクエリ呼び出しを一度に1つずつ保持することにより防止されます。

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();

前の章では、blog tutorialという名前のscaffold Webアプリケーションの動作を見てきました。 名前またはスラッグごとの検索カテゴリが含まれていました。

以下は、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ステートメントのライフサイクルです-

  • すべてのPHQLステートメントは解析され、データベースシステムによって実装されたSQLから完全に独立した中間表現(IR)として変換されます。
  • IRは、Webアプリケーションで使用されるデータベースシステムに従って、SQLステートメントに変換されます。 生成されたSQLステートメントはモデルに関連付けられます。
  • すべてのPHQLステートメントは一度解析され、メモリにキャッシュされます。 同じ文の結果が実行されると、パフォーマンスが向上します。

ライフサイクル