Search code examples
escapingdoctrine-ormdqlreserved-words

Doctrine DQL Reserved Words as entity names


Using Doctrine 2.

I have an entity called 'size' and I'm trying to form some DQL (using the QueryBuilder) to pull these entities from the database.

It looks like 'Size' is a reserved word http://www.doctrine-project.org/docs/orm/2.0/en/reference/dql-doctrine-query-language.html#id3

I'm unable to find a way to escape the entity name (I've tried backticks and double quotes)

$dql = "SELECT product p join p.size size";

Executing the above results in:

Fatal error: Uncaught exception 'Doctrine\ORM\Query\QueryException' with message '[Syntax Error] line 0, col 53: Error: Expected IdentificationVariable | StateFieldPathExpression | AggregateExpression | "(" Subselect ")" | ScalarExpression, got 'size'' 

It looks like where the manual talks about escaping reserved words - it is referring to column and table names. Can anyone shed any light on this? Is it impossible to used reserved (in DQL) words as entity names?

Thanks


Solution

  • Using an alias I was able to overcome this problem.

    $dql = "SELECT p, sizealias FROM Product p JOIN p.size sizealias";
    

    I am not using straight DQL, but using the queryBuilder instead, the above solution works there too.

    $qb->select('p, sizealias')
       ->from('Product', 'p')
       ->join('p.size', 'sizealias');