Почему псевдоним столбца не работает в доктрине? - PullRequest
9 голосов
/ 09 сентября 2010

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

$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.

Iесть два вопроса:

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

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

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

Ответы [ 3 ]

9 голосов
/ 05 июня 2013

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

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

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

8 голосов
/ 12 сентября 2010

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

2: почему 'num_a' в предложении with не заменен на 'i__0', какисправил это?

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

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

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

1 голос
/ 26 ноября 2015

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

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

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

...