单向ManyToMany由另一个实体加入

时间:2012-07-10 17:11:54

标签: doctrine doctrine-orm

我有项目,网站链接和类别。 Item有一个Weblink,Weblink有一个Category:

/** @Entity */
class Item {
    /**
      * @ManyToOne(targetEntity="Weblink", inversedBy="items")
      */
    private $weblink;
}

/** @Entity */
class Weblink {
    /**
      * @ManyToOne(targetEntity="Category", inversedBy="weblinks")
      */
    private $category;

    /**
      * @OneToMany(targetEntity="Item", mappedBy="weblink")
      */
    private $items;
}

/** @Entity */
class Category {
    /**
      * @OneToMany(targetEntity="Weblink", mappedBy="category")
      */
    private $weblinks;
}

到目前为止一切顺利。现在我想介绍一个Category::$items字段,其中包含所有具有此类别网络链接的项目。

我尝试使用单向ManyToMany,但它失败了,因为它试图再次创建已经存在的连接表(它是Weblink实体的表):

/**
 * @ManyToMany(targetEntity="Item")
 * @JoinTable(name="weblink",
 *      joinColumns = { @JoinColumn(name="category_id", referencedColumnName="id") },
 *      inverseJoinColumns = { @JoinColumn(name="id", referencedColumnName="weblink_id") }
 *      )
 */
private $items;

有没有办法确定这种关系?

1 个答案:

答案 0 :(得分:0)

如果我正确理解你的问题,那么确实没有必要映射这种关系。它已存在于您的映射中。当你想要一个类别中包含的所有项目时,你可以通过写下来获得它们:

$category_id = $id;
$oCategory = $entityManager->find('Category', $category_id);
$items = $oCategory->getWeblinks()->getItems();

在您的类别实体中:

public function getWeblinks(){
     return $this->weblinks;
}

并在Weblink实体中

public function getItems(){
     return $this->items;
}