Экранирование обратной косой черты в пространствах имен с помощью DQL (Doctrine 2) - PullRequest
1 голос
/ 13 августа 2011

Я немного запутался в написании запросов на 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 ]

1 голос
/ 14 августа 2011

См. Динамические имена пространств имен (заключенные в кавычки идентификаторы) должны экранировать обратную косую черту

Похоже, первый синтаксис просто удачен. :) Я сам не пробовал, поэтому, если вы скажете, что запрос с экранированием работает так же, как запрос без экранирования, лучше использовать экранированные запросы.

0 голосов
/ 13 августа 2011

Хорошая мысль, но DQL принимает запрос и сопоставляет его с пространством имен и классом перед отправкой проанализированного запроса в ядро ​​базы данных.

MyProject \ Model \ User обрезается до имени таблицы, указанного в классе User.

ВЫБРАТЬ u ИЗ MyProject \ Model \ User u ГДЕ u.age> 20 становится

ВЫБРАТЬ u ОТ пользователя [т.е. имя таблицы указано в классе пользователя] u ГДЕ u.age> 20

...