优化学说查找和更新代码

时间:2014-06-24 14:36:57

标签: php symfony doctrine-orm

目前,这就是我如何通过find& amp;更新所选行的方式。更新

private function turnOnLight($entity_manager, $model, $year)
{
    // Is this an optimized way to update a single column? 
    // It seems not as we need 2 rounds DB communication trip.

    $car = $entity_manager->findOneBy(array(
        'model' => $model,
        'year'  => $year,
        'light' => 0
    ));

    if (is_null($car)) {
        return;
    }

    $car->light = 1;
    $entity_manager->persist($car);
    $entity_manager->flush();
}

但是,我觉得这不够高效,因为它需要2个DB操作(查找和更新)。

有没有办法优化上面的代码?

1 个答案:

答案 0 :(得分:0)

正如人们在评论中提到的那样,这是正确的。

如果你没有对象的引用,首先要做的就是检索它。

将其拆分为两个可能更好,因为如果在检索它时发生了某些事情,则更容易调试或解决此问题。

一个小小的提示,在更新现有实体时,已经存在我的意思是数据库中的内容,你不应该调用call $ entity_manager-> persist($ car)。

持久化方法让Doctrine知道它应该跟踪这个实体,但是因为它已经在数据库中,Doctrine知道它所以它会在任何属性发生变化时自动更新它。

总而言之,调用同花顺就足够了。