最佳做法:如何从一个实体获取相关实体


Best practice: how to get related entities from one entity

给定两个实体PermissionGroup及其关系实体GroupPermission,我想从任何Group对象中获取相关的Permission

以下是我的实体的(简化)描述:

----------
Permission
----------
permissionId
name
-----
Group
-----
groupId
name
----------------
GroupPermission
----------------
groupPermissionId
groupId
permissionId

除了我的三个文档类(描述PermissionGroupGroupPermission对象)之外,我还有三个存储库类(包含所有与数据库相关的逻辑)。

理想情况下,我希望能够执行$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中。

但是由于在添加关系时无法避免刷新实体,因此我总是更喜欢存储库方式。