doctrine/doctrine2 — pull request #648 by Taluu (2013-04-13 22:38:03+00:00)
Title: Add a AddParameters method in the QueryBuilder

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
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
setParameter('criteriaA', $criteriaA)
->setParameter('criteraB', $criteriaB);
//...
```

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

```php
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.