0

我在我的 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 注册为新实体,则该实体被管理

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

谢谢!

4

2 回答 2

1

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

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

于 2012-07-27T08:24:22.377 回答
0

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

这就是你要做的事情(我不建议这样做,但无论如何:-P)

// Assume that $em is a instance of the EntityManager
$attachedObject = $em->merge($object);
于 2012-08-03T08:24:23.860 回答