目前,这就是我如何通过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操作(查找和更新)。
有没有办法优化上面的代码?
答案 0 :(得分:0)
正如人们在评论中提到的那样,这是正确的。
如果你没有对象的引用,首先要做的就是检索它。
将其拆分为两个可能更好,因为如果在检索它时发生了某些事情,则更容易调试或解决此问题。
一个小小的提示,在更新现有实体时,已经存在我的意思是数据库中的内容,你不应该调用call $ entity_manager-> persist($ car)。
持久化方法让Doctrine知道它应该跟踪这个实体,但是因为它已经在数据库中,Doctrine知道它所以它会在任何属性发生变化时自动更新它。
总而言之,调用同花顺就足够了。