Не могу понять как в симфони 4 создать форму, в которой я, при добавлении/обновлении продуктов, мог бы добавлять/удалять категории для редактируемого продукта. Ассоциация many to many.
У меня есть две сущности Product и Category со связывающей таблицей product_category. Код ниже сокращен для простоты
Product entity:
<?php
namespace App\Entity;
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\ProductRepository")
*/
class Product
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Category", inversedBy="products")
*/
private $category;
public function __construct()
{
$this->category = new ArrayCollection();
}
public function getId(): ?int
{
return $this->id;
}
/**
* @return Collection|Category[]
*/
public function getCategory(): Collection
{
return $this->category;
}
public function addCategory(Category $category): self
{
if (!$this->category->contains($category)) {
$this->category[] = $category;
}
return $this;
}
public function removeCategory(Category $category): self
{
if ($this->category->contains($category)) {
$this->category->removeElement($category);
}
return $this;
}
}
Category entity:
<?php
namespace App\Entity;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity(repositoryClass="App\Repository\CategoryRepository")
*/
class Category
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Product", mappedBy="category")
*/
private $products;
public function __construct()
{
$this->products = new ArrayCollection();
}
/**
* @return Collection|Product[]
*/
public function getProducts(): Collection
{
return $this->products;
}
public function addProduct(Product $product): self
{
if (!$this->products->contains($product)) {
$this->products[] = $product;
$product->addCategory($this);
}
return $this;
}
public function removeProduct(Product $product): self
{
if ($this->products->contains($product)) {
$this->products->removeElement($product);
$product->removeCategory($this);
}
return $this;
}
}
И соответсвенно таблицы:
create table product
(
id int auto_increment primary key
);
create table category
(
id int auto_increment primary key
);
И связующая таблица:
create table product_category
(
product_id int,
category_id int
)
В итоге как не пытался, максимум что получалось, это сделать форму, в которой я могу при обновлении продукта только обновлять ИМЯ категории. Но как удалить или добавить новую категорию у продукта понять не могу. Разумеется, в отдельных формах, и продукты и категории успешно обрабатываются.
Кто может чего подсказать или дать ссылку на рабочий пример? Офф доки читал, и делал всё по ним, что и привело меня к результату возможности изменения имени категории в форме продукта. Гугл тоже не сильно помог в этом вопросе