我在一个庞大的集合(超过 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 不能检测到更新的对象,从而只更新数据库中的那些对象呢?
有什么我做错了吗?我可能忘记了?