的Entity
不應該有一個具體的參照Repository
但沒有什麼不對的定義Interface
,有你的Repository
實現這個接口,並將其注入到Entity
。
該解決方案Doctine 2 Restricting Associations with DQL
interface TreeInterface
{
public function findParent();
public function findChildren();
}
那麼你的實體的類似。
class Group
{
$repository;
setRepository(TreeInterface $repository)
{
$this->tree = $repository;
}
public function getParent()
{
return $this->repository->findParent($this);
}
public function getChildren()
{
return $this->repository->findChildren($this);
}
}
class GroupRepository extends EntityRepository implements TreeInterface
{
public function findParent(Group $group)
{
return //stuff
}
public function findChildren(Group $group)
{
return //stuff
}
}
然後你以這種方式使用它。
$group = $em->find('Group', 1);
$group->setRepository($em->getRepository('Group'));
$children = $group->getChildren();
爲了避免設置每個你得到一個孩子時的資料庫,我想借此看看eventmanager進行和餐後事件,看看你是否可以在負荷注入TreeInterface到實體。