Symfony2-Doctrine: отношение ManyToMany не сохраняется в базе данных
у меня есть два класса моделей PHP с именем Category и Item. Категория может иметь много элементов, и элемент может принадлежать ко многим категориям. Я создал многотомное отношение к обоим классам:
class Category
{
/**
* @ORMManyToMany(targetEntity="Item", mappedBy="categories", cascade={"persist"})
*/
private $items;
/**
* Add items
*
* @param AkoStoreBundleEntityItem $items
*/
public function addItems(AkoStoreBundleEntityItem $items)
{
$this->items[] = $items;
}
/**
* Get items
*
* @return DoctrineCommonCollectionsCollection
*/
public function getItems()
{
return $this->items;
}
}
и:
class Item
{
/**
* @ORMManyToMany(targetEntity="Category", inversedBy="items", cascade={"persist"})
* @ORMJoinTable(name="item_category",
* joinColumns={@ORMJoinColumn(name="item_id", referencedColumnName="id")},
* inverseJoinColumns={@ORMJoinColumn(name="category_id", referencedColumnName="id")}
* )
*/
private $categories;
/**
* Add categories
*
* @param AkoStoreBundleEntityCategory $categories
*/
public function addCategories(AkoStoreBundleEntityCategory $categories)
{
$this->categories[] = $categories;
}
/**
* Get categories
*
* @return DoctrineCommonCollectionsCollection
*/
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.
на этой странице Я показываю список всех элементов в поле выбора. Пользователь может выбрать один элемент и добавить его в категорию.
список элементов, которые относятся к категории отображаются ниже по форме.
когда я отправляю форму, выбранный элемент добавляется в список элементов категории и отображается ниже, но он не хранится в базе данных, и если обновить страницу, он исчезает.
может кто-нибудь, пожалуйста, помогите мне с этим? Спасибо заранее.
2 ответа:
ваша категория сущности является обратная сторона отношения.
попробуйте изменить addItems выглядеть так:
public function addItem(\Ako\StoreBundle\Entity\Item $item) { $item->addCategory($this); $this->items[] = $item; }