使用DQL转义名称空间中的反斜杠(Doctrine 2)

时间:2011-08-13 01:27:15

标签: namespaces doctrine doctrine-orm dql backslash

我对在DQL中编写查询感到困惑。 从官方文档:

$query = $em->createQuery('SELECT u FROM MyProject\Model\User u WHERE u.age > 20');

为什么名称空间的反斜杠不会被转义? 因为这个原因,我在Zend Studio中收到警告,无论如何它都有效,但我认为只是“运气”,因为\ M和\ U都不是有效的转义序列。

你怎么看?使用那种语法是否安全?或者最好总是在DQL中逃避“\”?

$query = $em->createQuery('SELECT u FROM MyProject\\Model\\User u WHERE u.age > 20');

2 个答案:

答案 0 :(得分:1)

请参阅Dynamic namespace names (quoted identifiers) should escape backslash

看起来第一种语法很幸运。 :)我自己没有尝试过,所以如果你说使用转义的查询就像没有escping的查询一样,最好使用转义查询。

答案 1 :(得分:0)

很好,但是在将解析后的查询发送到数据库引擎之前,DQL会对Namespace和Class进行查询和匹配。

MyProject \ Model \ User将减少到User类中指定的表名。

  

SELECT u FROM MyProject \ Model \ User u WHERE u.age> 20成为

     

SELECT u FROM user [即用户类中指定的表名] u WHERE   u.age> 20