2014-09-20 24 views
0

我有一些引用很多項目的用戶文檔。學說MongoDB加載相關文件的性能

用戶:

class User 
{ 

    //... 

    /** 
    * @ODM\ReferenceMany(targetDocument="Item", mappedBy="user", cascade={"remove"}) 
    */ 
    protected $items; 

    //... 

項目:

class Item 
{ 

    /** 
    * @ODM\ReferenceOne(targetDocument="User", inversedBy="items") 
    */ 
    protected $user; 

我想顯示與項目數的所有用戶的列表。所以,我有一個查詢:

$users = $dm->getRepository('Acme:User')->findAll(); 

而且我用的是count方法對「項目」區域

{% for user in users %} 
      // ... 
      {{ document.items.count }} items 
      // ... 
    {% endfor %} 

的問題是,學說爲每個用戶創建,這導致一個新的請求內存限制和超時。

有沒有辦法告訴教義加載所有的項目,當它執行findAll請求?我希望只在需要時才能完成此操作(不是在實體定義中,而是在查詢級別)。

回答

0

默認情況下,doctrine會執行一些延遲加載,例如,它不會在請求之前提取數據。如果你想避開延遲加載,你需要一個獲取連接而不是常規連接。

http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html#joins

這需要你寫自己的查詢爲「的findAll()」不會是你的朋友。

+0

這正是我想要實現的。你提供的鏈接是用於教條ORM的,可以用ORM(MongoDB而不是SQL)來完成嗎? – Julien 2014-09-21 09:42:15

+0

給它一個鏡頭,並找出答案。 – 2014-09-21 17:06:03