めちゃくちゃに見えますが、参考にしてみてはいかがでしょうか?
http://www.doctrine-project.org/documentation/manual/1_1/en/dql-doctrine-query-language%3Abnf
めちゃくちゃに見えますが、参考にしてみてはいかがでしょうか?
http://www.doctrine-project.org/documentation/manual/1_1/en/dql-doctrine-query-language%3Abnf
実際、人間が参考として使用しているとは思いません。しかし、誰かが BNF を理解する自動ツールを使用したい場合に役立つかもしれません。たとえば、ある種のコード ジェネレーターです。
BNF の利点は、言語を記述する正式な方法であることです。プログラムの場合、英語よりもはるかに理解しやすいです。
参考のため :
コメントの後に編集: DQL/オブジェクトに関する簡単な例を次に示します。
オブジェクト指向 API を使用してクエリを記述し、実行し、結果を取得するコードのこの部分を考えてみましょう(配列としてハイドレート -- デバッグ時に、このようにデータのみを出力します)。
$result = Doctrine_Query::create()
->select('p.id, p.title, u.login')
->from('Ab_Model_Post p')
->innerJoin('p.User u')
->where('p.codeStatus = ?')
->orderBy('p.date desc')
->limit(2)
->execute(array('OK'), Doctrine::HYDRATE_ARRAY);
var_dump($result);
そして、ここにあなたが得る出力の種類があります:
array
0 =>
array
'id' => string '7' (length=1)
'title' => string 'Septième post' (length=14)
'User' =>
array
'id' => string '1' (length=1)
'login' => string 'user1' (length=5)
1 =>
array
'id' => string '6' (length=1)
'title' => string 'Sixième post (draft=7)' (length=23)
'User' =>
array
'id' => string '1' (length=1)
'login' => string 'user1' (length=5)
もちろん、これはスキーマとモデルのクラスが問題ないことを考慮したものです -- フランス語の例で申し訳ありませんが、フランス語で書かれた Doctrine のデモンストレーションのために、以前にセットアップしたスキーマ/モデル/データベースを使用しました。
基本的に、DB はブログ アプリケーション用であり、ここでは :
ここで、「疑似 SQL 言語」のように「DQL」が意味するものを使用した、同等のものを次に示します。
$result = Doctrine_Query::create()
->query(<<<DQL
select p.id, p.title, u.login
from Ab_Model_Post as p,
p.User u
where p.codeStatus = ?
order by p.date desc
limit 2
DQL
, array('OK'), Doctrine::HYDRATE_ARRAY);
var_dump($result);
ここにはオブジェクト指向 API はありません(つまり、クエリを書くためです) : 私が考えていた疑似 SQL だけを書きました。これは、私が知る限り、BNF が説明しているものです。
そしてもちろん、 の出力var_dump
は以前に取得したものとまったく同じです。
これで物事がもう少し明確になることを願っています:-)
それは、文脈自由文法を記述する方法である Backus-Naur Form です。このウィキペディアの記事を参照してください。