Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-2400

[GH-648] Add a AddParameters method in the QueryBuilder

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Invalid
    • Affects Version/s: None
    • Fix Version/s: None
    • Component/s: None
    • Security Level: All
    • Labels:
      None

      Description

      This issue is created automatically through a Github pull request on behalf of Taluu:

      Url: https://github.com/doctrine/doctrine2/pull/648

      Message:

      Hi,

      On doctrine 2.2, when we were calling the method `setParameters` to set a bunch of parameters on the QueryBuilder, each parameters were added or modified if they were already existing.

      That is not the case since doctrine 2.3 : each calls to `setParameters` will wipe out the other already setted parameters. I think it is logic, but still is a huge BC break, which is not really mentionned in the UPGRADE file (only the once regarding the use of an ArrayCollection is mentionned).

      With this PR, I added a `addParameters` which allows to add several parameters in several calls. Here is a use case :

      ```php
      <?php
      // ... A repository
      class UserRepository extends EntityRepository
      {
      public function getUserWithSomething($criteriaA, $criteriaB, DateTime $since = null)
      {
      $qb = $this->createQueryBuilder('u');
      $qb->where($qb->expr()>andX($qb>expr()->eq('u.criteriaA', ':criteriaA'),
      $qb->expr()->eq('u.criteriaB', ':criteriaB')));

      // wanna search for objects since a specific date
      if (null !== $since)

      { $qb = $this->addSince($qb, $since); }

      $qb->addParameters(new ArrayCollection(['criteriaA' => $criteriaA,
      'criteriaB' => $criteriaB]));

      return $qb->getQuery()->execute();
      }

      public function addSince(QueryBuilder $qb, DateTime $since)

      { $qb = $qb->andWhere($qb->expr()->gte('u.date', ':since')); return $qb->setParameter('since', $since); }

      }
      ```

      So, as I was saying, until 2.2, you could use `setParameters` in the main method (`getUserWithSomething`) which was calling (or not) the submethod `addSince`, which could set parameters before calling the `setParameters` method. Now, you can't do that anymore : either you need to make several calls to `setParameter` :

      ```php
      <?php
      // ....
      $qb = $qb->setParameter('criteriaA', $criteriaA)
      ->setParameter('criteraB', $criteriaB);
      //...
      ```

      Either, I guess, you need to first retrieve all the parameters and then add them by hand :

      ```php
      <?php
      // ....
      $parameters = $qb->getParameters();
      $parameters->add(new Parameter('criteriaA', $criteriaA);
      $parameters->add(new Parameter('criteriaB', $criteriaB);

      $qb = $qb->setParameters($parameters);
      //...
      ```

      So that's why I propose this new method in the QueryBuilder. if I'm wrong anywhere, or need more information please feel free to comment.

      Cheers.

        Activity

        Doctrine Bot created issue -
        Hide
        Doctrine Bot added a comment -

        A related Github Pull-Request [GH-648] was closed:
        https://github.com/doctrine/doctrine2/pull/648

        Show
        Doctrine Bot added a comment - A related Github Pull-Request [GH-648] was closed: https://github.com/doctrine/doctrine2/pull/648
        Marco Pivetta made changes -
        Field Original Value New Value
        Status Open [ 1 ] Closed [ 6 ]
        Assignee Benjamin Eberlei [ beberlei ] Guilherme Blanco [ guilhermeblanco ]
        Resolution Invalid [ 6 ]
        Marco Pivetta made changes -
        Resolution Invalid [ 6 ]
        Status Closed [ 6 ] Reopened [ 4 ]
        Marco Pivetta made changes -
        Status Reopened [ 4 ] Resolved [ 5 ]
        Resolution Fixed [ 1 ]
        Marco Pivetta made changes -
        Resolution Fixed [ 1 ]
        Status Resolved [ 5 ] Reopened [ 4 ]
        Marco Pivetta made changes -
        Status Reopened [ 4 ] Resolved [ 5 ]
        Resolution Invalid [ 6 ]

        This list may be incomplete, as errors occurred whilst retrieving source from linked applications:

        • Request to http://www.doctrine-project.org/fisheye/ failed: Error in remote call to 'FishEye 0 (http://www.doctrine-project.org/fisheye/)' (http://www.doctrine-project.org/fisheye) [AbstractRestCommand{path='/rest-service-fe/search-v1/crossRepositoryQuery', params={query=DDC-2400, expand=changesets[0:20].revisions[0:29],reviews}, methodType=GET}] : Received status code 503 (Service Temporarily Unavailable)

          People

          • Assignee:
            Guilherme Blanco
            Reporter:
            Doctrine Bot
          • Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: