2016-07-07 64 views
-1

給定兩個實體PermissionGroup及其關係實體GroupPermission,我想從任何Group對象中獲得相關的Permission最佳實踐:如何從一個實體獲得相關實體

這裏是我的實體(簡化)說明:

---------- 
Permission 
---------- 
permissionId 
name 

----- 
Group 
----- 
groupId 
name 

---------------- 
GroupPermission 
---------------- 
groupPermissionId 
groupId 
permissionId 

除了我的三個文檔類(描述PermissionGroupGroupPermission對象),我有三個倉庫類(包含所有數據庫相關邏輯)。

理想情況下,我希望能夠做到$anyGroup->getPermissions(),並直接獲取所有Permission對象。

由於實體應該對其存儲庫(以及其他實體存儲庫)一無所知,因此我不知道實現此類行爲的最佳實踐是什麼。

編輯:繼@KhorneHoly回答我補充一定限制:

我的文檔類實現以易於序列化到JSON的JsonSerializable類。 因此,我有以下方法描述瞭如何做到這一點:

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

你可以得到他們的標準庫函數:

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

如果您要保存的權限爲ArrayCollection,會有另一種方式。

$anyGroup->getPermissions(); 

但是,爲了這個工作,你需要在添加關係時將權限添加到ArrayCollection

但是由於在添加關係時無法避免刷新實體,所以我總是喜歡使用Repository方式。

+0

我知道這種方法,但我有時需要直接在文檔類中使用相同的行爲。我已經按照編輯我的問題。 –

+0

@fef我看不到您的問題。如果您在控制器內部使用'json_serialize'函數,您只需從repo獲得權限並將其添加到數組中。 – KhorneHoly

+0

由於此方法經常使用,因此我不需要手動添加它們。 特別是當我做一些像'返回新的JsonResponse(數組('組'=> $ arrayContainingMultipleGroups))' –