Doctrine实体保存函数更新咨询:flush()传参已弃用
解决Doctrine flush带参数的弃用警告
你遇到的是Doctrine ORM的弃用提示——从版本2.10左右开始,给flush()方法传实体参数的写法就被标记为弃用,3.0版本会彻底移除这个功能。
修改方式很简单,直接移除flush()里的$car参数即可:
public function save(Car $car): void { $this->getEntityManager()->persist($car); $this->getEntityManager()->flush(); // 仅保留无参调用 }
补充说明:
- 原本的
flush($car)意图是只提交当前Car实体的变更,但Doctrine的单元工作(UnitOfWork)机制本身是按批次管理所有待持久化的实体,所谓“单独刷新某个实体”其实是伪特性,底层还是会处理所有已标记的变更,所以官方决定移除这个冗余的参数。 - 如果你的业务场景需要严格隔离当前操作的变更(避免其他未完成的实体被提交),可以用事务包裹整个操作:
public function save(Car $car): void { $em = $this->getEntityManager(); $em->beginTransaction(); try { $em->persist($car); $em->flush(); $em->commit(); } catch (\Exception $e) { $em->rollback(); throw $e; } }
内容的提问来源于stack exchange,提问作者Mayor of the Plattenbaus
相关产品推荐
相关产品推荐

