Symfony: проверка массива моделей перед сохранением группы - PullRequest
0 голосов
/ 24 марта 2020

У меня была группа объектов, которая расширяет абстрактный класс. Я утверждаю это в моделях. Когда я вставляю его один за другим, все нормально, но теперь я хочу добавить возможность импортировать его из файлов. У меня были все логи c, но у меня были проблемы с проверкой, потому что у каждого типа объектов разные параметры проверки. Например, у объекта A есть имя свойства, тип, максимальная скорость, минимальная скорость, интенсивность, у другого объекта B есть имя свойства, тип. В каждой модели у меня были утверждения, но некоторые из них основаны на том, что есть в базе данных. Например, если объект в базе данных имел тип: движение, имя: бег и интенсивность: «быстро», каждый новый объект с одинаковым типом и именем не может иметь одинаковую интенсивность. Проблема заключается в том, что если я попытаюсь вставить несколько строк за один раз, каждая из моделей сама пройдет проверку с помощью объектов db, но в массиве моделей может быть 2, 3 или, возможно, больше новых моделей, которые имеют одинаковый тип, имя и интенсивность. Если сохраняются и грипп sh их один за другим, это работает нормально, но если я хочу сохранить его по группам, как это:

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

Это может быть группа из тех же объектов, которые будут вставлены в БД. Я знаю, что проблема проста: я проверяю в модели, ища в БД другой объект с такими же свойствами, но постоянный объект еще не находится в БД, поэтому каждый следующий в группе не очищенный объект может пройти проверку перед вставкой в ​​БД. Я думаю о немногих возможностях решения этой проблемы: во-первых, это модели pu sh, которые по одному копируют в БД, но это может быть проблемой производительности, когда пользователь хочет вставить действительно большой кусок данных в один файл. Второй - создать ArrayCollection моделей и попытаться проверить их с помощью Collection Assert, и это звучит лучше для меня. Третий вариант - создать службу валидатора для массивов моделей и получить значения свойств и проверить только значения из моделей в массиве.

Но, возможно, это еще один вариант решения этой проблемы ?? Большое спасибо за любые идеи :)

...