尝试插入数据 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 之所以有效,是因为它们是简单的字符串。您应该使用传递的整数来获取实体,然后保存值。
我正在尝试使用捆绑包 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 之所以有效,是因为它们是简单的字符串。您应该使用传递的整数来获取实体,然后保存值。