鉴于两个实体Permission
和Group
及其关系实体GroupPermission
,我想从任何Group
对象获取相关的Permission
。
以下是我的实体的(简化)描述:
----------
Permission
----------
permissionId
name
-----
Group
-----
groupId
name
----------------
GroupPermission
----------------
groupPermissionId
groupId
permissionId
除了我的三个文档类(描述Permission
,Group
和GroupPermission
对象)之外,我还有三个存储库类(包含所有与数据库相关的逻辑)。
理想情况下,我希望能够 $anyGroup->getPermissions()
,并直接获取所有Permission
个对象。
由于实体应该对其存储库(以及其他实体存储库)一无所知,我不知道实现此类行为的最佳做法是什么。
编辑:关注@KhorneHoly回答后我添加了一些约束:
我的文档类实现了JsonSerializable
类,以便可以轻松地序列化为JSON。
因此,我有以下方法描述如何操作:
public function jsonSerialize()
{
return array(
'groupId' => $this->getGroupId(),
'name' => $this->getName(),
);
}
我想从那里访问权限,将它们包含在JSON中。
public function jsonSerialize()
{
return array(
'groupId' => $this->getGroupId(),
'name' => $this->getName(),
'permissions' => $this->getPermissions()
);
}
答案 0 :(得分:0)
您可以使用标准的存储库功能来获取它们:
$em = $this->getDoctrine()->getManager();
$em->getRepository('permissions')->findBy(array('groupId' => $anyGroup->getId()));
如果您要将权限保存到ArrayCollection
,则会有另一种方式。
$anyGroup->getPermissions();
但为了实现这一点,您需要在添加关系时将权限添加到ArrayCollection
。
但是由于在添加关系时没有办法避免冲洗实体,我总是更喜欢Repository方式。