2011-09-29 80 views
2

我正在使用PHP和Doctrine 2.0。所有的實體都可以正常工作,除了下面詳細描述的實體關係外(或者其他實體在我沒有注意到的地方失敗)。懶惰加載屬性不加載在Doctrine 2.0中


考慮下面的實體:

/** @Entity */ 
class Target { 
    /** 
    * @ManyToOne(targetEntity="k\entity\Source", cascade={"persist"}) 
    * @JoinColumn(name="basic_vacancy_id", nullable=false) 
    * @var \k\entity\Source 
    */ 
    $source; 

    ... 
} 

/** @Entity */ 
class Source { 

    ... 
} 

現在,當我打電話$target->getSource()我得到的k\entity\proxy\kentitySourceProxy一個實例(這是正確的代理類)。但是,Source屬性的所有獲取者都會返回NULL

我會做什麼錯?


我已經添加了fetch="EAGER"屬性關係註解,現在一切似乎去就好了(除了一個事實,即裝載不再偷懶)。什麼會導致Doctrine 2.0的延遲加載中斷?

回答

2

如上面在我的問題中所看到的,我已經將fetch =「EAGER」屬性添加到關係註釋中,現在一切似乎都很好(除了加載不再懶惰的事實)。

這當然是一個解決方法,並沒有修復實際的錯誤。除此之外,我仍然不知道是什麼導致我的代碼/原則中斷。但是,這種解決方法對性能的影響似乎可以忽略不計 - 即使完全存在。

0

它看起來像內部的d2錯誤。或者您使用反射來檢索對象的屬性。代理類使用persister在任何方法調用時初始化它們。當您在此代理上使用getter時,它是否發出查詢?

-1

我有一個非常similart問題,這裏報告: -

Zend 1.11.11 Doctrine 2.1.2 initalising of associative proxy entities

你在哪裏添加抓取= 「心切」 的屬性?

+0

-1,因爲這不是我的問題的答案 - 但我會,但是,擴大我的問題/答案,以包括此(有據可查)的信息。 – wen

+0

如果我得到了我的問題的答案,我會讓你知道:) –