2015-08-19 87 views
1

在我的環境中的幾個關鍵注意事項:學說2 - 無法訪問新創建的記錄(教義外)

  • 我有一個建立在WordPress的一個應用程序,我們使用學說作爲我們的ORM。
  • 爲了保持WP的完整性,我們讓WP處理用戶的創建
  • 每個WP對象和自定義對象都通過Doctrine正確映射。

的情況是:

// 1. Create a user via **WP** function (which returns ID) 
$wp_user_id = wp_insert_user($wp_user_array); 

// 2. Then, I need to immediately retrieve that user object via Doctrine 
$wp_user = $MyDb->em->getRepository('WpUsers')->findOneBy(array('id'=>$wp_user_id)); 

// 3. RESULT = NULL 

對象沒有找到,可能是因爲實體緩存或教訓存儲在內存中的某個地方。

我該如何強制Doctrine去查看數據庫並獲得這個新創建的用戶?

回答

0

對於這個問題的解決最終是相當簡單的。嘗試clear(),refresh()並強制清除Doctrine的緩存後,我的選項已用盡。

事實證明了我必須做的就是教義來檢查新紀錄被創造,是關閉和打開連接:

$this->_em->getConnection()->close(); 
$this->_em->getConnection()->connect(); 

不是最理想的解決方案,我知道,但它的工作原理我已經調試了五天了!

0

可以清除與

EntityManager::clear() 

學說緩存見http://doctrine-orm.readthedocs.org/en/latest/reference/working-with-objects.html(搜索clear方法)

+0

感謝您的快速響應,但是當我在嘗試檢索記錄之前添加'$ MyDb-> em-> clear();'時,仍然找不到它們。我知道它在數據庫中(通過調試看到),Doctrine無法訪問它。 **我是否正確地清除它?** – nathanbirrell

+0

只是爲了更正 - 在你的問題中,你有'$ MyDb-> em..',但現在有'$ TilDb-> em ...'。 Clear方法實際上是從存儲庫中分離出所有對象。還有一個想法。是教條​​和wordpress使用相同的連接?如果沒有,你可以嘗試在wordpress連接插入後在純粹的教條連接查詢? –

+0

是的名稱更改只是爲了使問題更通用。 WP和Doctrine使用相同的數據庫。我寧願避免通過DQL請求它,因爲我不確定這會返回一個對象嗎? – nathanbirrell