2012-06-18 25 views
4

我在一個巨大的集合(超過10k對象)上有一個很大的Symfony 2窗體。出於簡單的原因,我無法顯示數千個對象的形式。我正在顯示一個約300個對象的形式。爲什麼學說更新表單的每一個對象?

我發現沒有辦法收集過濾成一種形式,從而做到以下幾點:

$bigSetOfObjects = array(
     'myObject' => $this 
       ->getDoctrine() 
       ->getRepository('MyObject') 
       ->findBy(...) 
    ); 

    $form = $this->createForm(new MyObjectForm(), $bigSetOfObjects); 

    // And a little further 
    if ($this->getRequest()->getMethod() == 'POST') { 
     $form->bindRequest($this->getRequest()); 
     $this->getDoctrine()->getEntityManager()->flush(); 
    }   

一切都很正常。表單顯示正確的值,更新也正常工作。數據被正確保存到數據庫。問題在於Doctrine正在執行每個對象的單個更新語句,這意味着整個頁面大約有300個SQL語句,導致性能問題大。

我不明白的是,我只更新了一些表格的值,而不是所有的值。那麼爲什麼Doctrine無法檢測到更新的對象,從而僅更新數據庫中的那些對象?

有什麼我做錯了嗎?我可能已經忘記了?

+0

你可以添加你的持久性和沖刷的代碼嗎? –

+0

我已經添加了沖洗代碼。堅持在夾具中完成。 –

+0

嗯,我認爲一個請求綁定到表單中的每個對象。我寧願爲每個對象創建一個表單(不是爲了所有對象),檢查那些已被修改的對象,並僅保留這些對象。在更糟糕的情況下,您必須全部更新它們(與現在一樣),但請求數將是修改對象數的函數,而不是表單中對象的數量。 我希望它有助於^^ –

回答