Сериализатор Symfony игнорирует массивы объектов, но доктрина сохраняет их в порядке. - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь десериализовать полезную нагрузку json в сущность, мне нужно, чтобы объекты внутри этого массива принадлежали родительскому объекту. Пример полезной нагрузки.

{
    "exportOwner": "test@example.com",
    "uniqueIdentifier": "BCD99340-70D9-4E23-91DD-C40DFB64EC9D",
    "events": [
        {
            "uniqueIdentifier": "E09FDE82-4CAA-4641-87AF-6C092D6E71C1"
        }
    ]
}

При отправке это конкретное событие либо существует (с использованием uniqueIdentifier), либо нет. Если это не так, я создаю это. Проблема в том, что родительский объект, который содержит этот массив, в основном владеет ими, поэтому существует отношение OneToMany.

Поэтому мне нужно перебрать этот массив событий и вызвать setParentId() для вновь созданного родителяобъект. Что, я полагаю, мне нужно где-то сделать в этом блоке кода.

        $data = $request->getContent();
        $entity = $serializer->deserialize($data, $this->type, 'json');
        $entityManager = $this->getDoctrine()->getManager();
        $repo = $this->getDoctrine()->getRepository($this->type);

        // If it exists update it
        if($existingEntity = $repo->findOneBy(
                array(
                "uniqueIdentifier" => $entity->getUniqueIdentifier()
                )
            )){
            $entity->setId($existingEntity->getId());
            $entityManager->merge($entity);
            $entityManager->flush();
            return $this->_200response($this->type." with uuid '".$existingEntity->getUniqueIdentifier()."' already exists. It has been updated");
        }

        // Create
        $user = $this->getUserByEmail($entity->getExportOwner());
        // $entity->setExportOwnerId($user->getId());
        // $entity->setExportOwner(null);
        $entityManager->persist($entity);
        $entityManager->flush();
        return $this->_200response($this->type." with uuid '".$entity->getUniqueIdentifier()."' created");

Однако выполнение $entity->getEvents() возвращает пустой массив.

Отношение выглядит следующим образом:

     // Animal.php
   /**
     * @var Event[]|null
     * 
     * @ORM\OneToMany(targetEntity="Animal", mappedBy="animal")
     */
    private $events;


------------------------------------------------------------------

     // Event.php
    /**
     * @ORM\ManyToOne(targetEntity="Animal", inversedBy="metrics")
     */
    private $animal;

Даже когда я отправляю полезную нагрузку, а затем получаю объект обратно, массив событий пуст, но событие существует.

Это работает на 100% нормально, если я использую аннотацию @ORM\JoinTableс отношениями ManyToMany, но мне это не нужно. У меня есть одно животное для многих событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...