2

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

每当我尝试find()使用 QueryBuilder 获取它或使用事件时,它都会生成一个 Proxy 类,它无法正确存储然后在 Session 中唤醒。

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

有任何想法吗?

我已经尝试find()过从存储库、查询生成器甚至refresh()在获取实体但没有成功之后。

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

4

1 回答 1

4

Find() 永远不会返回代理对象,您可能在某处犯了错误。

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

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

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

oneToMany:
    phonenumbers:
      targetEntity: Phonenumber
      mappedBy: user
      fetch: EAGER
于 2013-07-01T13:09:13.440 回答