它看起来像一个大混乱,它如何作为参考?
http://www.doctrine-project.org/documentation/manual/1_1/en/dql-doctrine-query-language%3Abnf
答案 0 :(得分:3)
我认为它不被任何人类用作参考,实际上;但如果有人想使用一些了解BNF的自动工具,它可能会很有用;例如,某种代码生成器。
BNF的优势在于它是描述语言的正式方式 - 当你是一个程序时,它比英语更容易理解。
供参考:
评论后编辑:以下是关于DQL / Object内容的快速示例:
让我们考虑这部分代码,它使用面向对象的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,其中是法语。
基本上,数据库用于博客应用程序,在这里,我们:
现在,这是一个等价物,使用“DQL”的意思,如“伪SQL语言”:
$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
的输出与我之前的输出完全相同。
我希望这会让事情变得更清楚: - )
答案 1 :(得分:0)
它是Backus-Naur形式,一种描述无上下文语法的方法。请参阅this wikipedia article。