У меня есть двунаправленное отношение «один ко многим» ниже.
После создания crud-действий с задачей symfony2, когда я пытаюсь сохранить Продукты, связанные с категорией, в новой / редактируемой форме категории, продукты не сохраняются …
namespace Prueba\FrontendBundle\Entity; use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * @ORM\Entity * @ORM\Table(name="category") */ class Category { /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ private $id; /** * @ORM\OneToMany(targetEntity="Product", mappedBy="category") */ protected $products; /** * @ORM\Column(name="name") */ protected $name; public function __construct() { $this->products = new ArrayCollection(); } public function getId() { return $this->id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function __toString() { return $this->name; } public function getProducts() { return $this->products; } public function setProducts($products) { die("fasdf"); //here is not entering $this->products[] = $products; } public function addProduct($product) { die("rwerwe"); //here is not entering $this->products[] = $product; } }
namespace Prueba\FrontendBundle\Entity; use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * @ORM\Entity * @ORM\Table(name="product") */ class Product { /** * @ORM\Id * @ORM\Column(type="integer") * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\ManyToOne(targetEntity="Category", inversedBy="products") * @ORM\JoinColumn(name="category_id", referencedColumnName="id") */ protected $category; /** * @ORM\Column(type="string", length=100) */ protected $name; public function getId() { return $this->id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getCategory() { return $this->category; } public function setCategory($category) { $this->category = $category; } public function __toString() { return $this->name; } }
В качестве двунаправленного вам необходимо обновить ассоциацию с обеих сторон.
Добавьте эту функцию в объект Category (вы можете называть его addChild, если хотите):
public function addProduct($product) { $this->children->add($product); }
А затем обновите обе ассоциации в одно и то же время:
public function setProductCategory($product_category) { $this->productCategory = $product_category; $product_category->addProduct($this); }
Совет. Не используйте $ children / $ parent для описания Entities. Назовите это, что это $ category / $ product, вы столкнетесь с проблемами, когда хотите добавить в другое «родительское» отношение.