2012-07-10 39 views
1

我有這兩個實體:原則2:負荷實體和孩子的數

留言實體

class Message 
{ 
    /** 
    * @ManyToOne(targetEntity="User") 
    * @JoinColumn(name="author", referencedColumnName="id_user") 
    */ 
    protected $author; 

用戶實體

class User 
{ 
    /** 
    * @Id 
    * @Column(type="integer", nullable=false, name="id_user") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @Column(type="string", nullable=false) 
    */ 
    protected $name; 

我需要得到的總的用戶及其數據的消息以echo類似的東西這個:

echo $user->getName() . " have {$user->totalOfMessage()}"; 

我現在可以在用戶實體中創建一個關係以獲取消息集合。但我不知道它是否只需要獲得大小。

回答

2

嗯,我找到了答案。至少有一個不錯的選擇。

從學說2.1開始,你可以將關聯標記爲額外的懶惰。這意味着調用$ user-> getMessages() - > count()不會加載消息,它只會向數據庫發出COUNT查詢。

你可以閱讀有關額外懶集合在這裏:http://www.doctrine-project.org/docs/orm/2.1/en/tutorials/extra-lazy-associations.html

+0

根據文檔正確的,但我不能讓它工作 – 2012-10-10 15:28:49

+0

@Elvis,嘗試發佈您的實體來看看 – manix 2012-10-10 16:56:06

+0

我設法使它工作,我沒有在連接列下放置'fetch:EXTRA_LAZY'。我找不到明確的相關文檔 – 2012-10-27 00:21:46

0

我最近一直試圖讓EXTRA_LAZY裝載工作,發現什麼,我認爲是在文檔中相當大的錯誤頁面,如下所示: -

http://www.doctrine-project.org/docs/orm/2.1/en/tutorials/extra-lazy-associations.html

我期望大多數學說用戶可能認識到取=「EXTRA_LAZY」需要對多對多關係的「擁有」側被投入但示例顯示了註釋被添加到其中包含一個線'mappedBy'這不是擁有方嗎?

通過將fetch =「EXTRA_LAZY」指令添加到非擁有端,它會被完全忽略,因爲我現在知道它應該是。我認爲這應該在文檔中更清楚地陳述。

我無法找到任何地方解釋這個詳盡搜索後的任何地方,所以我會說這可能是值得修改的文檔?

在我們的使用案例中,我們使用了一個特別密集的處理模塊,它使用了大量的「contains」調用,並且由於超出內存限制而不斷崩潰成爲一個快速執行幾個數量級的快速過程。

希望這個信息可以幫助一個人在那裏......