Symfony2-Doctrine:ManyToMany关系不保存到数据库

我有两个名为Category和Item的PHP模型类。 一个类别可能有许多项目,一个项目可能属于许多类别。 我为这两个类创build了一个ManyToMany关系:

class Category { /** * @ORM\ManyToMany(targetEntity="Item", mappedBy="categories", cascade={"persist"}) */ private $items; /** * Add items * * @param Ako\StoreBundle\Entity\Item $items */ public function addItems(\Ako\StoreBundle\Entity\Item $items) { $this->items[] = $items; } /** * Get items * * @return Doctrine\Common\Collections\Collection */ public function getItems() { return $this->items; } } 

和:

 class Item { /** * @ORM\ManyToMany(targetEntity="Category", inversedBy="items", cascade={"persist"}) * @ORM\JoinTable(name="item_category", * joinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="id")}, * inverseJoinColumns={@ORM\JoinColumn(name="category_id", referencedColumnName="id")} * ) */ private $categories; /** * Add categories * * @param Ako\StoreBundle\Entity\Category $categories */ public function addCategories(\Ako\StoreBundle\Entity\Category $categories) { $this->categories[] = $categories; } /** * Get categories * * @return Doctrine\Common\Collections\Collection */ public function getCategories() { return $this->categories; } } 

现在在我的控制器中:

 $em = $this->getDoctrine()->getEntityManager(); $item = $em->getRepository('AkoStoreBundle:Item')->find($item_id); $category = $em->getRepository('AkoStoreBundle:Category')->find($category_id); $category->addItems($item); $em->flush(); // Render the same page again. 

在此页面中,我将显示select字段中的所有项目的列表。 用户可以select一个项目,并将其添加到类别中。

表格下方显示属于该类别的项目清单。

当我提交表单时,所选项目被添加到类别项目列表中,如下所示,但不存储在数据库中,如果刷新页面,它将消失。

任何人都可以帮我这个吗? 提前致谢。

你的分类实体是关系的反面 。

尝试改变addItems看起来像这样:

 public function addItem(\Ako\StoreBundle\Entity\Item $item) { $item->addCategory($this); $this->items[] = $item; } 

请注意,我将您的复数名称改为单数,因为您正在处理单个实体,而不是集合。

我有同样的问题…我想你忘了

 $category->addItems($item); $em->persist($category); $em->flush();