给定两个实体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()
);
}
您可以使用标准的存储库函数获取它们:
$em = $this->getDoctrine()->getManager();
$em->getRepository('permissions')->findBy(array('groupId' => $anyGroup->getId()));
如果要将权限保存到ArrayCollection
中,还有另一种方法。
$anyGroup->getPermissions();
但要使其正常工作,您需要在添加关系时将权限添加到ArrayCollection
中。
但是由于在添加关系时无法避免刷新实体,因此我总是更喜欢存储库方式。