Symfony - 更新多个记录

Woj*_*lik 9 optimization doctrine symfony

使用doctrine,symfony2更新数据库中的多个记录的最佳方法是什么?

我收到了一些记录ID,我必须更新.
我想为每个记录分配从接收到的数组到列show_order的索引.所以,如果我收到数组$ array = array(22,1,5,10),那么我想做

 $i = 0;
 foreach($array as $a) {
    $record = $this->getDoctrine->getRepository('AcmeBundle:SomeEntity')->findOneById($a);
    if ($record != null) $record->setOrder($i++);
 }
 $this->getDoctrine()->getEntityManager()->flush();
Run Code Online (Sandbox Code Playgroud)

但这是可怕的方式,因为对于每个记录我做一个SELECT,所以查询数量是O(n).

怎么做得更好?

Kri*_*ith 9

就像是...

foreach ($repo->findById($ids) as $obj) {
    $obj->setOrder(array_search($obj->getId(), $ids));
}

$em->flush();
Run Code Online (Sandbox Code Playgroud)

  • 我刚刚在我的symfony项目中实现了这个,并且通过观看app/dev.log,它为每条记录做了一次选择和一次更新 - 而不是一次更新 (5认同)

Eln*_*mov 7

作为第一个选项,您应该考虑批处理.如果由于某种原因这对你不可行,那么第二种选择是使用纯SQL,可能是通过DBAL.