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は、開発者が要件に応じてさまざまな側面をパーソナライズおよびカスタマイズできるようにします。
以下は、Phalconで実行される各PHQLステートメントのライフサイクルです-
- すべてのPHQLステートメントは解析され、データベースシステムによって実装されたSQLから完全に独立した中間表現(IR)として変換されます。
- IRは、Webアプリケーションで使用されるデータベースシステムに従って、SQLステートメントに変換されます。 生成されたSQLステートメントはモデルに関連付けられます。
- すべてのPHQLステートメントは一度解析され、メモリにキャッシュされます。 同じ文の結果が実行されると、パフォーマンスが向上します。