首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Symfony2-原则: ManyToMany关系不保存到数据库

Symfony2-原则: ManyToMany关系不保存到数据库
EN

Stack Overflow用户
提问于 2011-08-13 02:45:14
回答 2查看 53.1K关注 0票数 60

我有两个名为Category和Item的PHP模型类。一个类别可以有多个项目,一个项目可以属于多个类别。我已经为两个类创建了一个ManyToMany关系:

代码语言:javascript
复制
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;
    }
}

和:

代码语言:javascript
复制
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;
    }
}

现在在我的控制器中:

代码语言:javascript
复制
$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.

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

属于该类别的项目列表显示在表单下方。

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

有谁能帮我一下吗?提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-13 04:03:33

您的类别实体是关系的inverse side

尝试将addItems更改为如下所示:

代码语言:javascript
复制
public function addItem(\Ako\StoreBundle\Entity\Item $item)
    {
        $item->addCategory($this);
        $this->items[] = $item;
    }

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

票数 93
EN

Stack Overflow用户

发布于 2012-04-17 05:50:01

我也有同样的问题...我想你忘了

代码语言:javascript
复制
$category->addItems($item);
$em->persist($category);
$em->flush();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7044864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档