Почему псевдоним столбца не работает в доктрине?

Мой сценарий выглядит так:

$query = Doctrine_Query::create () ->select('count(p.product_id) as num_a') ->from ( 'ProductComments p' ) ->groupBy('p.product_id') ->having('num_a =2 '); 

И сгенерированный sql:

 SELECT COUNT(i.product_id) AS i__0 FROM productcomments i GROUP BY i.product_id HAVING num_a=2 

Таким образом, я получаю сообщение об ошибке при выполнении sql.

У меня есть два вопроса:

  1. почему псевдоним таблицы 'i' вместо 'p' ?

  2. почему 'num_a' в том, что предложение не заменено на 'i__0' , как его исправлять?

Спасибо за ваше предложение …

1: почему псевдоним таблицы «i» вместо «p»?

2: почему «num_a» в том, что предложение не заменено на «i__0», как его фиксировать?

Оба вопроса просто отвечают: Doctrine использует свои собственные псевдонимы для запроса. Вам не нужно знать эти псевдонимы, так как они не будут влиять на вас, и вам не придется работать с ним.

Несмотря на то, что Doctrine называет псевдоним i__0 вы можете получить доступ к атрибуту с вашим пользовательским псевдонимом, например $yourObject->num_a будет иметь правильное значение, а именно результат count(p.product_id) .

Чтобы увидеть, что результат вашего запроса является полезной функцией отладки, но полагаться внутри внутри вашего приложения не имеет смысла, поскольку эти значения используются только для внутренних механизмов Doctrine.

У меня также была проблема с настройкой псевдонима. Мне пришлось установить псевдоним, а затем использовать «ORDER BY» с этим псевдонимом. Следующее решение сработало для меня:

 $myQuery->addSelect('(<my select>) AS my_alias'); $myQuery->orderBy('my_alias'); 

В результате запрос выглядел так: «… () AS p_0 … ORDER BY p_0». Надеюсь, это поможет кому-то.

Это недействительно SQL.

Стандартное состояние SQL, которое SELECT будет логически выполнено после его использования . Поэтому вам нужно повторить код с псевдонимом.

Хороший совет. До тех пор, пока вы работаете с SQL-потребляющими БД, как можно ближе придерживайтесь SQL.