Jaki jest najlepszy sposób aktualizacji wielu rekordów w bazie danych za pomocą doktryny, symfony2?Symfony - aktualizacja wielu rekordów
Otrzymuję tablicę identyfikatorów rekordów, które muszę zaktualizować.
Chcę przypisać do każdego rekordu jego indeks z odebranej tablicy do kolumny show_order. więc jeśli otrzyma tablicy $ array = array (22, 1, 5, 10), a następnie chcę zrobić
$i = 0;
foreach($array as $a) {
$record = $this->getDoctrine->getRepository('AcmeBundle:SomeEntity')->findOneById($a);
if ($record != null) $record->setOrder($i++);
}
$this->getDoctrine()->getEntityManager()->flush();
ale to straszny sposób, bo dla każdego rekordu zrobić dobrać, więc liczba zapytań jest Na).
Jak to zrobić lepiej?
Mam na razie jeden pomysł: uzyskać wszystkie rekordy, sprawdzić, która kolejność się zmieniła i zaktualizować tylko je. Ale nie czuję się usatysfakcjonowany z powodu tego rozwiązania. Więc zrobi jedno SELECT, aby uzyskać wszystkie rekordy, kilka wybranych (aby uzyskać obiekty encji) i kilka aktualizacji (lub może jeden, ponieważ myślę, że aktualizacja jest wywoływana po flush()). –
Jeśli nie ma dobrego rozwiązania przy użyciu doktryny 2 może powinienem to zrobić w prostym PHP i użyć CASE WHEN ... THEN ... w kwerendzie sql? –