优化原则,查找和更新代码


Optimize doctrine find and update code

目前,这是我如何更新选定行的方式,通过查找&更新。

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操作(找到&更新)。

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

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

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

最好将其分成两个,因为如果检索时发生了什么,则更容易调试或修复此问题。

一个小提示,当更新一个已经存在的实体时,这里的已经存在是指数据库中的东西,您不应该调用call $entity_manager->persist($car)。

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

长话短说,调用flush就足够了。