Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-3108

Criteria cannot reference a joined tables' fields when used with an ORM QueryBuilder

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.4.2
    • Fix Version/s: 2.5
    • Component/s: DQL, ORM
    • Security Level: All

      Description

      This regression was introduced in 2.4.2 with the addition of the "rootAlias" stuff. Basically, the hard-coded addition of the rootAlias + "." prevents any Criteria object from referencing any field that isn't on the first table selected.

      Example:
      // Assume $repo is a valid EntityRepository and $value is some scalar value.
      $qb = $repo->createQueryBuilder('T1')->join('T1.field', 'T2');

      $criteria = new Comparison('T2.field2', Comparison::EQ, $value);

      $qb->addCriteria($criteria);
      $dql = $qb->getDQL();

      $dql is now (roughly) equal to:
      SELECT T1 FROM <entityclass> T1 JOIN T1.field T2 WHERE T1.T2.field2 = <value>

      Evaluating this causes QueryExceptions to be thrown; usually something along the lines of "Expected Doctrine\ORM\Query\Lexer::<token>, got '.'"

      There's a similar issue involving ordering by a related field for the same reason.

        Issue Links

          Activity

          Hide
          Marco Pivetta added a comment -

          Fixed in DDC-3436

          Show
          Marco Pivetta added a comment - Fixed in DDC-3436

            People

            • Assignee:
              Marco Pivetta
              Reporter:
              Chris Rog
            • Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: