2014-10-19 140 views
0

我試圖從他自己的存儲庫訪問實體的私有屬性。通過執行PHP告訴我,我無法訪問私有或受保護的屬性或方法。從Symfony2存儲庫訪問私有或受保護的屬性

我只是調用由我創建的自定義存儲庫方法,傳遞實體的一個實例。例如,當我嘗試獲取ID時,PHP會向我拋出錯誤。

我如何訪問它?

public function customMethod($entityInstance) 
{ 
    $query = $this->getEntityManager() 
    ->createQuery(
      'SELECT c 
      FROM AcmeMainBundle:Content c 
      WHERE 
       c.published = 1 
       AND 
       c.id != :id 
      ORDER BY c.date DESC' 
    ) 
    ->setParameter('id',$entityInstance->id); 

    return $query->getResult(); 
} 

這是我的存儲庫自定義方法的一個示例。顯然只是一個例子,DQL不是非常有用,但當我嘗試訪問$ entityInstance-> ID ...

有人可以幫助我嗎?

回答

1

RepositoryEntity之間的關係是概念性的,而不是結構性的。這意味着雖然你知道他們有關,PHP沒有。

如果你想從訪問Entity的私有成員的Repository你將不得不做它像任何其他類:使用干將制定者

試試這個:

->setParameter('id', $entityInstance->getId()); 
+0

OFC,我fotget它。它的工作原理,謝謝! – 2014-10-19 12:35:00

0

好吧,和所有普通的PHP腳本一樣,如果你想訪問一個私有或受保護的屬性,你必須創建一個getter。 DQL不會改變PHP站點的任何內容,它只會對SQL語法(這只是PHP中的一個字符串)添加小的更改。

所以實際上,我沒有看到你想說的這個問題。那DQL應該改變PHP和OO的工作方式嗎?