2010-10-22 90 views
2

它看起來像當我忘記把leftJoin放在我的查詢中時,Doctrine會在我選擇它們之後延遲加載關係。也就是說,如果我這樣做:主義:懶惰加載屬性

$property = PropertyTable::getInstance()->createQuery('o') 
    ->leftJoin('o.Features f') 
    ->execute() ; 

我仍然能夠訪問財產而$>景點,即使我沒有在此查詢加載它們。所以我認爲Doctrine在內部通過調用另一個'SELECT'來完成它。有沒有辦法通過拋出一些異常來防止這種自動加載?這將幫助我創建更好更快的查詢。

回答

-1

你看過它生成的實際SQL嗎?

嘗試->getSql()。當您嘗試訪問相關字段時,它很可能正在執行另一個查詢。

如果你想避免這種情況,請不要訪問相關領域!

+0

是的,我已經嘗試過,沒有,它不加載Attraction的。但我可以通過$ property-> Attraction訪問它們。我想拋出一些異常,所以在編寫查詢時我不會犯錯。當我製作真正大的節目時,很容易跳過這樣的事情。 – Zeljko 2010-10-22 17:54:45

+0

我相信你可以訪問它們,因爲它觸發了一個新的查詢,因此它是預期的行爲。我認爲這裏的解決方案不是改變機器,而是要更多地關注你如何使用機器。 – Tom 2010-10-23 09:40:49

+0

是的,但主意是防止自動獲取。跳過一些加入大型項目的快速開發是非常容易的。 – Zeljko 2010-10-24 11:51:02