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無法檢測到更新的對象,從而僅更新數據庫中的那些對象?
有什麼我做錯了嗎?我可能已經忘記了?
你可以添加你的持久性和沖刷的代碼嗎? –
我已經添加了沖洗代碼。堅持在夾具中完成。 –
嗯,我認爲一個請求綁定到表單中的每個對象。我寧願爲每個對象創建一個表單(不是爲了所有對象),檢查那些已被修改的對象,並僅保留這些對象。在更糟糕的情況下,您必須全部更新它們(與現在一樣),但請求數將是修改對象數的函數,而不是表單中對象的數量。 我希望它有助於^^ –