尝试插入数据 ManyToOne FOSRestBundle

Trying to insert data ManyToOne FOSRestBundle

我正在尝试使用捆绑包 FOSRestBundle (SF5) 创建 API REST。 我有一个实体 "Categorie",它可以有一个父实体 "Categorie"。 这是实体:

<?php

namespace App\Entity\Main;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use JMS\Serializer\Annotation\Expose;
use JMS\Serializer\Annotation\ExclusionPolicy;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity(repositoryClass="App\Repository\CategorieRepository")
 * @ORM\Table(name="categorie")
 * @ExclusionPolicy("all")
 */
class Categorie
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @Expose
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @var string
     * @Assert\NotBlank()
     * @Expose
     * @ORM\Column(type="string", length=255)
     */
    private $libelle;

    /**
     * @var string
     * @Assert\NotBlank()
     * @Expose
     * @ORM\Column(type="string", length=255)
     */
    private $icone;

    /**
     * @var Categorie
     * @ORM\ManyToOne(targetEntity="App\Entity\Main\Categorie", inversedBy="categories", cascade={"all"}, fetch="EAGER")
     * @ORM\JoinColumn(name="categorie_parent_id", referencedColumnName="id", nullable=true)
     */
    private $categorieParent;

    /**
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="App\Entity\Main\Categorie", mappedBy="categorieParent")
     */
    private $categories;

    /**
     * @var ArrayCollection
     * @ORM\OneToMany(targetEntity="App\Entity\Main\Produit", mappedBy="categorie")
     */
    private $produits;

    public function __construct()
    {
        $this->produits = new ArrayCollection();
    }

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getLibelle(): ?string
    {
        return $this->libelle;
    }

    public function setLibelle(string $libelle): self
    {
        $this->libelle = $libelle;

        return $this;
    }

    public function getIcone(): ?string
    {
        return $this->icone;
    }

    public function setIcone(string $icone): self
    {
        $this->icone = $icone;

        return $this;
    }

    public function setCategorieParent(Categorie $categorieParent): self
    {
        $this->categorieParent = $categorieParent;

        return $this;
    }

    public function getCategorieParent(Categorie $categorieParent)
    {
        return $this->categorieParent;
    }
}

这是我在控制器中的操作:

/**
     * @Rest\View(statusCode=Response::HTTP_CREATED)
     * @Rest\Post("/api/{_locale}/categorie/create", name="api_categorie_create")
     * @ParamConverter("categorie", converter="fos_rest.request_body")
     * @IsGranted("ROLE_SUPER_ADMIN")
     * @return Categorie|View
     */
    public function create(Categorie $categorie, ConstraintViolationList $violations)
    {
        if (count($violations)) {
            return $this->view($violations, Response::HTTP_BAD_REQUEST);
        }

        $em = $this->getDoctrine()->getManager('main');
        $em->persist($categorie);
        $em->flush();

        return $categorie;
    }

当我使用 postman 插入包含此内容的数据时:

{
    "libelle":"Blonde", 
    "icone":"blonde.png", 
    "categorieParent.id": 1
}

"libelle" 和 "icone" 已插入,但未设置 "categorieParent"。 我试过了:

{
    "libelle":"Blonde", 
    "icone":"blonde.png", 
    "categorieParent": 1
}
{
    "libelle":"Blonde", 
    "icone":"blonde.png", 
    "categorieParent": {
        "id": 1
    }
}

每次尝试,我都会用数字和字符串设置 id。

而且什么都不行。 感谢您的帮助:) !

Categories Parent 将只接受一个 Category 实体; libelle 和 icone 之所以有效,是因为它们是简单的字符串。您应该使用传递的整数来获取实体,然后保存值。