2012-03-16 73 views
6

編輯:如果你有類似的問題This Topic將是你感興趣如何防止懶惰加載一對一關係的教條?

我有用戶和UserSettings與一對一的雙向關係。看起來,即使我沒有在我的頁面中使用任何UserSettings值,doctrine懶惰加載它。

這是預期的行爲?爲什麼Doctrine獲取這些數據,即使我沒有在我的頁面中使用它?如果我無法阻止它,那麼每次檢索用戶對象時都必須將此用戶設置加入到用戶中,但這是不必要的。

我該怎麼做才能防止這種情況發生?加載數據

代碼:

->createQuery('SELECT p, u, s FROM TestPostBundle:Post p LEFT JOIN p.user u LEFT JOIN p.sub s WHERE p.id IN (:ids)') 
->setParameter('ids', $ids) 
->getResult(); 

將通過崗位樹枝我環路和顯示數據後和相關的用戶,但我從來沒有要求任何UserSettings變量,我不訪問它們。

+0

請發送加載用戶的代碼。 – 2012-03-16 11:08:41

+0

@FractalizeR我剛添加了代碼 – DavidW 2012-03-16 12:50:53

+1

這不是行爲。我猜你在某個地方實際上正在獲取用戶設置。嘗試在你的getUserSetting方法中放入一個die()語句。這應該證實或否認我的猜測。 – Cerad 2012-03-16 13:18:08

回答

1

我也面臨同樣的問題。似乎從反面學說查詢也查詢擁有方。見this discussion

+0

相關文章我想你可能有興趣看看:http://stackoverflow.com/questions/9848747/primary-key-ofownown-side- as-a-join-column – DavidW 2012-03-24 02:50:26

+0

我在相關問題中發佈瞭解決方法:http://stackoverflow.com/a/14885237/138106 – 2013-02-14 22:29:08

4

我已經看到了這個問題,在一些地方和問我在這裏將我的回答:

我碰到同樣的問題,並記住symblog教程給瞭如何通過明確減少延遲加載的例子在不需要的表上添加左連接。將連接表包含在連接中似乎很奇怪,甚至根本不需要這些數據,但這樣您可以將所有這些額外的查詢減少到1,並且運行速度更快。

搜索延遲加載 - 關於一路下跌http://tutorial.symblog.co.uk/docs/customising-the-view-more-with-twig.html

爲了解決這個問題,用戶/用戶數據問題,嘗試添加該用戶信息庫,只要你需要,即使讓所有用戶都使用到1/5你不想要用戶數據。它可以通過選擇部分來進一步增強: - ( '局部p {USER_ID,名稱}')>選擇

public function getAll($limit = 500) { 
     $qb = $this->createQueryBuilder('u') 
      ->select('u', 'd') 
      ->leftJoin('p.userdata', 'd') 
     if (false === is_null($limit)) 
      $qb->setMaxResults($limit); 
    return $qb->getQuery()->getResult(); 
    } 

UPDATE
的symblog教程似乎是向下和我要離開在暫時的情況下暫時鏈接到這裏。相關的代碼在這裏的答案。

+1

鏈接已損壞 – Mick 2015-03-13 11:57:52