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 52

2 ответа:

ваша категория сущности является обратная сторона отношения.

попробуйте изменить addItems выглядеть так:

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

У меня были те же проблемы...Я думаю, ты забыл

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