Doctrine2 - 为会话加载的实体不起作用

时间:2012-07-27 08:12:57

标签: zend-framework doctrine-orm

我在ZendFramework项目中使用Doctrine2而且我有一个不容易为我解决的问题......

因此,当用户成功登录页面时,我将他的对象放入会话中:

Zend_Auth::getInstance()->getStorage()->write($user);

一切正常,但当我刷新页面并从会话中加载用户时:

$user = Zend_Auth::getInstance()->getStorage()->read();

使用这个$ user我不能做任何Doctrine2操作: - /。我可以使用例如“getId()”方法,但是当我尝试例如在任何关系中使用$ user时:

$session = new App_Model_LogSessions();
$session->setUser($user);
...

我看到了Doctrine2异常:

  

不管理实体App_Model_Users。如果实体从数据库中获取或通过EntityManager#persist

注册为new,则对其进行管理

我该如何解决这个问题?有没有“重新加载”实体的方法?我需要使用会话,我不想在每个页面请求中从数据库加载用户。我想加载他一次并让他参加会议。

谢谢!

2 个答案:

答案 0 :(得分:1)

在会话中保存Doctrine实体(基本上是您需要的)在这里得到解答:Doctrine 2: Can entities be saved into sessions?

取决于您将如何使用该实体,转换为数组可能会同时工作,同时非常简单。您将无法将其用作实体(持久等),但您将能够访问数据。

答案 1 :(得分:0)

我建议您只存储实际ID并使用缓存。但要解决您的问题,您可以随时重新附加实体。

这是你怎么做的(我不建议这样做但是无论如何:-P)

// Assume that $em is a instance of the EntityManager
$attachedObject = $em->merge($object);