Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-335

Refactor DQL EBNF to use JOIN FETCH as syntax for fetch joins only


    • Type: Improvement Improvement
    • Status: Closed
    • Priority: Critical Critical
    • Resolution: Fixed
    • Affects Version/s: 2.0-ALPHA4
    • Fix Version/s: 2.0-BETA1
    • Component/s: DQL
    • Security Level: All
    • Labels:


      There are several problems with the current approach on fetch joins:

      1. There is no way to determine in the parser already if a join is fetch or not, this makes it much harder to implement things like @OrderBy or @OrderColumn
      2. A DQL like "SELECT u, FROM User u JOIN g" currently tries to partially load the group object instead of just returning as scalar. This is very unintuiative.

      Solution, change the EBNF too:

      Join                                       ::= ["LEFT" ["OUTER"] | "INNER"] "JOIN" [FETCH] JoinAssociationPathExpression 
                                                     ["AS"] AliasIdentificationVariable [("ON" | "WITH") ConditionalExpression]

      Question would be how to specify partial object selects.

      Romans idea was something like:

      select u.{name, other, field, stuff}

      However my take is this would again put information into the select clause that might be interesting elsewhere, so

      SELECT u FROM User u JOIN FETCH PARTIAL id, name

      That way we could add both $isFetchJoin and $isPartial flags to the AST/Join Node plus an additional $partialFields array.

        Issue Links



            • Assignee:
              Roman S. Borschel
              Benjamin Eberlei
            • Votes:
              0 Vote for this issue
              0 Start watching this issue


              • Created: