What is the best way to update multiple records in database using doctrine, symfony2?
I receive array of records ids which I have to update.
I want to assign to each record its index from received array to column show_order.
So if i receive array $array = array(22, 1, 5, 10) then I want to do
$i = 0;
foreach($array as $a) {
$record = $this->getDoctrine->getRepository('AcmeBundle:SomeEntity')->findOneById($a);
if ($record != null) $record->setOrder($i++);
}
$this->getDoctrine()->getEntityManager()->flush();
but it's horrible way, because for each record I do one SELECT, so number of queries is O(n).
How to do it better?
So this is still 0(n), but it's 1n rather than 2n. To avoid the unnecessary selects, I solved this problem using a custom repository class and the doctrine query builder like so:
then say you have an array of content ids in order like this:
Then you can update the order from your controller pretty simply:
Something like...
As the first option, you should consider Batch Processing. If that's not viable for you for some reason, the second option is to go with plain SQL, probably via DBAL.