膨大なコレクション(10,000を超えるオブジェクト)に大きなSymfony2フォームがあります。単純な理由で、何千ものオブジェクトのフォームを表示することはできません。約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は更新されたオブジェクトを検出できず、データベース内のそれらのオブジェクトのみを更新できないのでしょうか。
私が間違っていることはありますか?忘れたの?