Jestem nowy w Doctrine i nadal są dla mnie niewyraźne obszary. W tym przypadku wstawiam nowy rekord do bazy danych za pomocą pętli i menedżera encji. Działa dobrze, ale zauważyłem, że Doctrine tworzy jedno zapytanie wstawiane przez jednostkę, która może stać się całkiem olbrzymia.Doctrine2 - Wiele wstawek w jednym ujęciu
Korzystając z Doctrine2 i Symfony 2.3, chciałbym się dowiedzieć, jak możemy go skonfigurować, aby zrobił tylko jedno zapytanie wstawiające ze wszystkimi wartościami (oczywiście mówimy tylko o 1 encji).
Co to znaczy zmienia się następująco:
INSERT INTO dummy_table VALUES (x1, y1)
INSERT INTO dummy_table VALUES (x2, y2)
Do
INSERT INTO dummy_table VALUES (x1, y1), (x2, y2)
Oto mój kod:
$em = $this->container->get('doctrine')->getManager();
foreach($items as $item){
$newItem = new Product($item['datas']);
$em->persist($newItem);
}
$em->flush();
Na co sprawa, że można połączyć te kwerendy w jeden? – Touki
Myślałem o poprawie wydajności. To tylko przykład, najprawdopodobniej jest to najprawdopodobniej około 20 elementów do wstawienia. Tak więc tylko połączenie byłoby znacznie szybsze niż n połączeń. EDYCJA: Znalazłem [tę odpowiedź] (http://stackoverflow.com/questions/1793169/which-is-faster-multiple-single-inserts-or-one-multiple-row-insert) na ten temat. – Molkobain
Mogę cię ostrzec, doktryna dodaje sporo nakładu pracy na każdą z wkładek, które robisz (zarządza stanem i podobnymi), więc w przypadku naprawdę dużych wstawek zamiast nich wybierałem zapytania DBAL zamiast relacji ORM. // tylko moje 2 centy. –