У меня есть две сущности, Вопрос и Альтернатива , где Вопрос имеет отношение OneToMany с Альтернативой, и я пытаюсь отправить JSON с вложенным документом Альтернатива на него через POST на Вопрос Платформа API.
Платформа API возвращает эту ошибку ниже:
Nested documents for "alternatives" attribute are not allowed. Use IRIs instead.
При поиске я обнаружил, что некоторые люди говорятэто возможно только при использовании IRI и некоторых других людей, которые говорят, что можно использовать контексты денормализации и нормализации для решения этой проблемы, но я не могу найти какой-либо пример или учебник по этому поводу.
TL; DR;
Есть ли способ отправить вложенное отношение в POST сущности на платформе API без использования IRI?
UPDATE:
Asвопрос, см. ниже два сопоставления Вопроса и Альтернативных сущностей.
Вопрос
<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\QuestionRepository")
* @ApiResource()
*/
class Question implements CreatedAtEntityInterface, UpdatedAtEntityInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Token", inversedBy="questions")
* @ORM\JoinColumn(nullable=false)
* @Assert\NotBlank()
*/
private $token;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Question", inversedBy="question_versions")
*/
private $question;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Question", mappedBy="question")
*/
private $question_versions;
/**
* @ORM\Column(type="integer")
* @Assert\NotBlank()
*/
private $version;
/**
* @ORM\Column(type="string", length=100)
* @Assert\Length(max="100")
* @Assert\NotBlank()
*
*/
private $name;
/**
* @ORM\Column(type="integer")
* @Assert\NotBlank()
*/
private $type;
/**
* @ORM\Column(type="text", length=65535)
* @Assert\NotBlank()
* @Assert\Length(max="65535")
*/
private $enunciation;
/**
* @ORM\Column(type="string", length=255, nullable=true)
* @Assert\Length(max="255")
*/
private $material;
/**
* @ORM\Column(type="text", length=65535, nullable=true)
* @Assert\Length(max="65535")
*/
private $tags;
/**
* @ORM\Column(type="boolean")
* @Assert\NotNull()
*/
private $public;
/**
* @ORM\Column(type="boolean")
* @Assert\NotNull()
*/
private $enabled;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
*/
private $createdAt;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
*/
private $updatedAt;
/**
* @ORM\OneToMany(targetEntity="App\Entity\Alternative", mappedBy="question")
*/
private $alternatives;
/**
* @ORM\OneToMany(targetEntity="App\Entity\QuestionProperty", mappedBy="question")
*/
private $properties;
/**
* @ORM\OneToMany(targetEntity="App\Entity\QuestionAbility", mappedBy="question")
*/
private $abilities;
/**
* @ORM\OneToMany(targetEntity="QuestionCompetency", mappedBy="question")
*/
private $competencies;
}
Альтернатива
<?php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use DateTimeInterface;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
/**
* @ORM\Entity(repositoryClass="App\Repository\AlternativeRepository")
* @ORM\Table(name="alternatives")
* @ApiResource()
*/
class Alternative implements CreatedAtEntityInterface, UpdatedAtEntityInterface
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Question", inversedBy="alternatives")
* @ORM\JoinColumn(nullable=false)
* @Assert\NotBlank()
*/
private $question;
/**
* @ORM\Column(type="text", length=65535)
* @Assert\NotBlank()
* @Assert\Length(max="65535")
*/
private $enunciation;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
*/
private $createdAt;
/**
* @ORM\Column(type="datetime")
* @Assert\DateTime()
*/
private $updatedAt;
/**
* @ORM\OneToMany(targetEntity="App\Entity\AlternativeProperty", mappedBy="alternatives")
*/
private $properties;
}