2012-07-27 108 views
0

我在ZendFramework项目中使用Doctrine2和我有一个不容易解决了我的问题...实体Doctrine2 - 加载会话不起作用

所以,当用户成功登录页面,我把他的对象到会话:

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

一切工作正常,但是当我刷新页面,并从会话负载的用户:

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

而与此$用户,我可以做任何Doctr ine2操作: - /。我能够例如使用“的getId()”方法,但是当我尝试例如使用$用户在任何关系:

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

我看到Doctrine2例外:

实体App_Model_Users是没有管理。如果一个实体从数据库中获取或通过EntityManager注册为新的,则管理实体#persist

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

谢谢!

回答

1

节能主义实体会话(基本上你需要的东西)在这里回答:Doctrine 2: Can entities be saved into sessions?

取决于你将如何使用该实体,转换到一个数组力量的工作,而这是在同一很简单时间。您将无法将其用作实体(持续等),但您将能够访问数据。

0

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

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

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