2012-07-27 105 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);