2

我有项目、网络链接和类别。项目有一个 Weblink,Weblink 有一个类别:

/** @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字段,它将包含所有具有此类别的网络链接的项目。

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

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

有没有办法映射这种关系?

4

1 回答 1

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;
}
于 2012-09-20T19:43:03.540 回答