Jak walidować importowane encje??

Jak walidować importowane encje??
K0
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 4 lata
  • Postów:25
0

Witam,
w moim projekcie opartym na symfony 4 pojawiła się potrzeba importowania danych z pliku. Całą otoczkę zagadnienia już wykonałem jednakże chciałbym zapisywać zaimportowane dane do bazy danych w grupach w razie przypadku, gdy użytkownik wrzuci plik z dużą ilością danych, aby dane z niego w miarę sprawnie załadować do bazy. Tak więc najpierw wrzucam załadowane dane do tablicy, a potem za pomocą odpowiedniego serwisu przydzielam im właściwy model danych, który potem waliduję, wrzucam do odpowiedniej encji i wykonuje metodę persist() z entity menadżera i dopiero gdy wykonam persist na powiedzmy 10 encjach chcę wrzucić wszystko do bazy za pomocą metody flush(). Przykładowy kod poniżej:

Kopiuj
$batchSize = 10;
$i = 1;
foreach ($activities as $activity) {
    $entityManager->persist($activity);
    if (($i % $batchSize) === 0) {
        $entityManager->flush();
        $entityManager->clear();
    }
++$i;
}
$entityManager->flush();

I wszystko byłoby w porządku gdyby nie to, iż walidacja na modelu sprawdza także czy w bazie danych nie ma już encji która posiada kilka właściwości o tej samej wartości np. jeśli w bazie danych jest obiekt o typie A i nazwie B to nie można stworzyć drugiego, który ma takie same właściwości. Problem polega na tym, iż przy takim grupowym wrzucaniu do bazy danych za pomocą assertów z modelu nie jestem w stanie sprawdzić obiektu, który nie jest jeszcze w bazie danych i jeśli w jednej porcji danych wrzucanych do bazy znajdą się potencjalne duplikaty to zostają one uznane za zwalidowane poprawnie i zapisane w bazie. Czy jest jakiś sposób by rozwiązać ten problem bez tworzenia kolejnego serwisu, który będzie przechodził po całej tablicy modeli i wyszukiwał możliwe duplikaty?? Dzięki wielkie za jakiekolwiek sugestie.

Miang
  • Rejestracja:około 7 lat
  • Ostatnio:minuta
  • Postów:1685
1

Może zrób w bazie unique na tych polach


dzisiaj programiści uwielbiają przepisywać kod z jednego języka do drugiego, tylko po to by z projektem nadal stać w miejscu ale na nowej technologii
K0
O tym nie myślałem, aczkolwiek chyba nie za bardzo jest to wykonalne, gdy 2 lub więcej obiektów o nazwie A i typie B nie mogą się znaleźć w bazie ale już gdy jeden będzie miał nazwę A i typ B a drugi nazwę A i typ BB lub nazwę AB i typ B już jak najbardziej są poprawne, a nawet pożadane :(
Miang
w niektórych bazach można zrobić organicznie unique po kilku polach
K0
O to by było coś czego szukałem :) Dzięki wielkie zaraz będę szukał czy to jest możliwe w mojej bazie danych ;)
K0
Rzeczywiście da się to zrobić na bazie danych, a jak zacząłem szukać w ten sposób to nawet za pomocą adnotacji doctrine da się takie coś wymusić na bazie danych. Także jeszcze raz dziękuję za pomoc, bo nawet nie pomyślałem, że takie złożone zobostrzenia da się zaimplementować bezpośrednio na bazie danych. W moim przypadku dochodzi jeszcze zabawa w niektórych przypadkach z zobostrzeniami w kolumnach w 2 tabelach aczkolwiek z tym sobie dam radę. Szczerze już traciłem nadzieję na jakąkolwiek sugestię, a tu taka niespodzianka;)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.