我有两个名为Category和Item的PHP模型类。一个类别可以有多个项目,一个项目可以属于多个类别。我已经为两个类创建了一个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.
在此页面中,我显示了选择字段中所有项目的列表。用户可以选择一个项目,并将其添加到类别中。
属于该类别的项目列表显示在表单下方。
当我提交表单时,选定的项目将添加到类别项目列表中,并显示在下面,但它不会存储在数据库中,如果刷新页面,它将消失。
有谁能帮我一下吗?提前谢谢。
发布于 2011-08-13 04:03:33
您的类别实体是关系的inverse side。
尝试将addItems更改为如下所示:
public function addItem(\Ako\StoreBundle\Entity\Item $item)
{
$item->addCategory($this);
$this->items[] = $item;
}
请注意,我将您的复数名称更改为单数名称,因为您处理的是单个实体,而不是集合。
发布于 2012-04-17 05:50:01
我也有同样的问题...我想你忘了
$category->addItems($item);
$em->persist($category);
$em->flush();
https://stackoverflow.com/questions/7044864
复制相似问题