2014-10-19 127 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的工作方式吗?