Пропустить сущность, которая существует в базе данных - PullRequest
0 голосов
/ 28 мая 2019

У меня есть данные JSON, которые мне нужно импортировать в дБ.Мне нужно проверить два значения поля в базе данных перед сохранением сущности.Если они существуют, чтобы пропустить их без выдачи ошибки, а если нет, то создать только отсутствующую ошибку.

        $file = file_get_contents('file.json');
        $jsonData = json_decode($file, true);

        $check = $this->getMyRepository()->findOneBy([
                'first_name' => $firstName,
                'last_name' => $lastName
            ]);

        foreach ($jsonData as $data) {

            if ($check) {
                continue;
            } else {
                $new = new MyEntity();
                $new->setFirstName($data->getFirstName());
                $new->setLastName($data->getLastName());
                $this->em->persist($new);
            }
        }
    }
    $this->em->flush();
}

Импорт работает, но когда я запускаю API, он всегда импортирует все значения и не долженЯ упоминал.

1 Ответ

1 голос
/ 28 мая 2019

Пожалуйста, смотрите комментарии в коде, чтобы увидеть, что изменилось и почему

По сути, вы преобразуете файл json в массив, поэтому вам нужно обратиться к $data в виде массива, чтобы получить его значения.

Код, который проверяет, существует ли уже этот человек, должен находиться внутри цикла, поскольку вы хотите проверять каждого человека при обработке набора людей в файле json.

Теперь мы знаем, что ваш JSON-файл действительно не помогает и не заслуживает названия JSON .....

Файл примера

{ "John Doe": "John Doe", "Jane Doe": "Jane Doe" }

Код должен быть

        $file = file_get_contents('file.json');
        $jsonData = json_decode($file, true);


        foreach ($jsonData as $data) {
             // Split the single field into Firstname and lastname
            $name = explode(' ', $data);

            $exists = $this->getMyRepository()->findOneBy([
                                'first_name' => $name[0],
                                'last_name' => $name[1]
                            ]);

            if ($exists) { 
                // this person already in the database
                // thats cool, just dont try and insert them again
                continue;
            } else {

                // again in here you are getting data from an array 
                // called `$data` and not an entity with getters and setters
                $new = new MyEntity();
                $new->setFirstName($name[0]);
                $new->setLastName($name[1]);
                $this->em->persist($new);
            }
        }
    }
    $this->em->flush();
}

Большое предупреждение Этот код опирается на файл данных JSON ВСЕГДА, имеющий имя и фамилию, разделенные пробелом. ЭТО ОЧЕНЬ ОПАСНОЕ, ЧТОБЫ НАДЕЖДАТЬСЯ

Вы действительно должны вернуться к человеку, который создал этот файл JSON, и попросить сделать это правильно !!!

...