Details

    • Type: Improvement Improvement
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 2.2
    • Fix Version/s: 2.4
    • Component/s: DQL
    • Security Level: All
    • Labels:
      None

      Description

      This is basically a duplicate of another issue I stumbled across lately but cannot find here again. It added a __clone() function to the ORM QueryBuilder to allow this use case:
      Create a base query and derive two different queries from it.

      I adopted the code for the DBAL QueryBuilder which is suffering the same issue (e.g. expressions were not cloned but shared between instances). The code is tested at least for my limited use case.

          /**
           * Deep clone of all expression objects in the SQL parts.
           *
           * @return void
           */
          public function __clone()
          {
              foreach ($this->sqlParts as $part => $elements) {
                  if (is_array($this->sqlParts[$part])) {
                      foreach ($this->sqlParts[$part] as $idx => $element) {
                          if (is_object($element)) {
                              $this->sqlParts[$part][$idx] = clone $element;
                          }
                      }
                  } else if (is_object($elements)) {
                      $this->sqlParts[$part] = clone $elements;
                  }
              }
      
              $params = array();
      
              foreach ($this->params as $param) {
                  $params[] = clone $param;
              }
      
              $this->params = $params;
          }
      

        Issue Links

          Activity

            People

            • Assignee:
              Benjamin Eberlei
              Reporter:
              Tim Mundt
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: