我对在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');
答案 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