【问题标题】:Access private or protected properties from Symfony2 repository从 Symfony2 存储库访问私有或受保护的属性
【发布时间】:2014-12-14 12:22:50
【问题描述】:

我正在尝试从他自己的存储库访问实体的私有属性。通过做 PHP 告诉我我不能访问私有或受保护的属性或方法。

我只是调用我创建的自定义存储库方法,传递实体的一个实例。例如,当我尝试获取 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 ...

有人可以帮助我吗?

【问题讨论】:

    标签: symfony repository entity private


    【解决方案1】:

    好吧,与所有普通的 PHP 脚本一样,如果您想访问私有或受保护的属性,您必须创建一个 getter。 DQL 并没有改变 PHP 站点的任何内容,它只是对 SQL 语法(在 PHP 中只是一个字符串)进行了微小的更改。

    所以实际上,我看不出你想对这个问题说什么。 DQL 应该改变 PHP 和 OO 的工作方式吗?

    【讨论】:

      【解决方案2】:

      RepositoryEntity 之间的关系是概念性的,而不是结构性的。这意味着,尽管您知道它们 相关,但 PHP 不相关。

      如果您想从 Repository 访问 Entity 的私​​有成员,您必须像使用任何其他类一样:使用 getterssetters .

      试试这个:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-13
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-04
        相关资源
        最近更新 更多