Создать сущность с отношением по запросу POST с платформой Api - PullRequest
0 голосов
/ 23 февраля 2020

Я хочу отправить почтовый запрос, который создает сущность, а также другие сущности из отношений «один ко многим». У меня есть bet_question, который может быть связан со многими bet_choices и многими bet_points, и я хочу создать bet_question с некоторыми bet_choices и bet_points в одном запросе. Я использовал группы сериализации, как написано в do c, но все равно получаю эту ошибку: Вложенные документы для атрибута "betPoints" не допускаются. Вместо этого используйте IRI.

Вот что я отправляю (с accept: application/json в заголовке):

{
   "question":"Will team A win ?",
   "betPoints":[
      {
         "value":"100"
      },
      {
         "value":"200"
      }
   ],
   "betChoices":[
      {
         "name":"Yes",
         "odds":2
      },
      {
         "name":"No",
         "odds":2
      }
   ],
   "fixture":"/api/fixtures/23"
}

А вот мои объекты:

Усеченный объект BetQuestion

/**
 * @ApiResource(attributes={
 *         "normalizationContext"={"groups"={"bet:read"}},
 *         "denormalizationContext"={"groups"={"bet:write"}}
 *     })
 * @ORM\Entity(repositoryClass="App\Repository\BetQuestionRepository")
 */
class BetQuestion
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups({"bet:read"})
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Groups({"bet:read", "bet:write"})
     */
    private $question;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\BetPoint", mappedBy="betQuestion", cascade={"persist"})
     * @Groups({"bet:read", "bet:write"})
     */
    private $betPoints;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\BetChoice", mappedBy="betQuestion", cascade={"persist"})
     * @Groups({"bet:read", "bet:write"})
     */
    private $betChoices;

    /**
     * @ORM\OneToOne(targetEntity="App\Entity\Fixture", inversedBy="betQuestion", cascade={"persist", "remove"})
     * @Groups({"bet:read", "bet:write"})
     */
    private $fixture;

Усеченный объект BetPoint

/**
 * @ApiResource()
 * @ORM\Entity(repositoryClass="App\Repository\BetPointRepository")
 */
class BetPoint
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups({"bet:read"})
     */
    private $id;

    /**
     * @ORM\Column(type="integer")
     * @Groups({"bet:read", "bet:write"})
     */
    private $value;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\BetQuestion", inversedBy="betPoints")
     * @ApiSubresource(maxDepth=1)
     */
    private $betQuestion;

Усеченный объект BetChoice

/**
 * @ApiResource()
 * @ORM\Entity(repositoryClass="App\Repository\BetChoiceRepository")
 */
class BetChoice
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     * @Groups({"bet:read"})
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Groups({"bet:read", "bet:write"})
     */
    private $name;

    /**
     * @ORM\Column(type="boolean")
     * @Groups({"bet:read"})
     */
    private $value = false;

    /**
     * @ORM\Column(type="float")
     * @Groups({"bet:read", "bet:write"})
     */
    private $odds;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\BetQuestion", inversedBy="betChoices")
     * @Groups({"bet:write"})
     */
    private $betQuestion;

Можете ли вы помочь мне понять, что я делаю не так, пожалуйста?

1 Ответ

0 голосов
/ 25 февраля 2020

У вас есть синтаксическая ошибка в аннотации:

/**
 * @ApiResource(attributes={
 *     "normalizationContext"={"groups"={"bet:read"}},
 *     "denormalizationContext"={"groups"={"bet:write"}}
 * })
 */

Это должно быть:

/**
 * @ApiResource(
 *     normalizationContext={"groups"={"bet:read"}},
 *     denormalizationContext={"groups"={"bet:write"}},
 * )
 */

Что также эквивалентно:

/**
 * @ApiResource(attributes={
 *     "normalization_context"={"groups"={"bet:read"}},
 *     "denormalization_context"={"groups"={"bet:write"}},
 * })
 */

Ссылка : https://api-platform.com/docs/core/serialization/#using -сериализация-группы

...