是否有可能以纯粹的形式在Doctrine2中获取已经缓存的实体?
每当我尝试使用find()
或使用QueryBuilder的事件来获取它时,它会产生一个Proxy类,这是不可能正确存储然后在Session中唤醒的。
我正在使用该实体作为用户身份,我想在会话中保留,但似乎适配器无法真正唤醒代理。
有什么想法吗?
在获取实体后,我从存储库,查询构建器甚至find()
尝试了refresh()
。
哦,正如我所知道的EAGER fetch方法,我不确定它在这种情况下是否可用以及如何,因为没有关系发生,代理实际上来自Doctrines缓存,或者我相信
答案 0 :(得分:4)
Find()永远不会返回代理对象,你可能在某个地方犯了错误。
Find()始终返回实体类的对象,其关系将是代理对象。如果您希望关系不是代理,则必须使用DQL急切加载它们:
SELECT e, r FROM Enity e JOIN e.relation r
或者,通过在映射中指定始终急切加载的关系,yaml示例:
oneToMany:
phonenumbers:
targetEntity: Phonenumber
mappedBy: user
fetch: EAGER