【问题标题】:Doctrine2 - the entity loaded for session doesn't workDoctrine2 - 为会话加载的实体不起作用
【发布时间】:2012-07-27 08:12:57
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: zend-framework doctrine-orm


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2014-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多