我有项目,网站链接和类别。 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;
有没有办法确定这种关系?
答案 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;
}