Doctrine2:如何获取纯实体,而不是代理?

时间:2013-07-01 12:02:20

标签: php zend-framework doctrine-orm zend-framework2

是否有可能以纯粹的形式在Doctrine2中获取已经缓存的实体?

每当我尝试使用find()或使用QueryBuilder的事件来获取它时,它会产生一个Proxy类,这是不可能正确存储然后在Session中唤醒的。

我正在使用该实体作为用户身份,我想在会话中保留,但似乎适配器无法真正唤醒代理。

有什么想法吗?

在获取实体后,我从存储库,查询构建器甚至find()尝试了refresh()

哦,正如我所知道的EAGER fetch方法,我不确定它在这种情况下是否可用以及如何,因为没有关系发生,代理实际上来自Doctrines缓存,或者我相信

1 个答案:

答案 0 :(得分:4)

Find()永远不会返回代理对象,你可能在某个地方犯了错误。

Find()始终返回实体类的对象,其关系将是代理对象。如果您希望关系不是代理,则必须使用DQL急切加载它们:

SELECT e, r FROM Enity e JOIN e.relation r

或者,通过在映射中指定始终急切加载的关系,yaml示例:

oneToMany:
    phonenumbers:
      targetEntity: Phonenumber
      mappedBy: user
      fetch: EAGER