tags:

views:

38

answers:

1

My script is like this:

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

And the generated sql is:

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

Thus I get an error when execute the sql.

I have two questions:

  1. why is the alias of the table 'i' instead of 'p'?

  2. why is the 'num_a' in having clause not replaced with 'i__0',how to fixed it?

Thanks for your suggestion...

A: 

1: why is the alias of the table 'i' instead of 'p'?

2: why is the 'num_a' in having clause not replaced with 'i__0',how to fixed it?

Both questions are simply answered: Doctrine uses it's own aliases for the query. You do no need to know these aliases since they will not affect you nor will you need to work with it.

Even tough Doctrine names the alias i__0 you can access the attribute with your custom alias, e.g. $yourObject->num_a will have the proper value, namely the result of count(p.product_id).

To see the output of your query is a useful debug feature, but relying on in inside your application is non-sense since these values are only used for the internal mechanisms of Doctrine.

DrColossos
Thanks for your reponse. I completely agree with you that it's not necessary to know the generated alias. What puzzles me is that since the alias for count(p.product_id) is i__0, i__0 should be used in having clause instead of "num_a".