Пожалуйста, смотрите комментарии в коде, чтобы увидеть, что изменилось и почему
По сути, вы преобразуете файл 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, и попросить сделать это правильно !!!