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

时间:2016-07-07 07:46:44

标签: php mongodb doctrine-orm symfony

鉴于两个实体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()
    );
}

1 个答案:

答案 0 :(得分:0)

您可以使用标准的存储库功能来获取它们:

$em = $this->getDoctrine()->getManager();
$em->getRepository('permissions')->findBy(array('groupId' => $anyGroup->getId()));

如果您要将权限保存到ArrayCollection,则会有另一种方式。

$anyGroup->getPermissions();

但为了实现这一点,您需要在添加关系时将权限添加到ArrayCollection

但是由于在添加关系时没有办法避免冲洗实体,我总是更喜欢Repository方式。