让我们想象一下我们有这样的代码:
//...
$item = $xyz->findOneBy(array('type'=>'abc'));
$em->remove($item);
$second = $xyz->findOneBy(array('type'=>'abc'));
//...
这$second从数据库获取任何值吗?我的目标是将$second作为空列表。但我不确定我是否必须做$em->flush();在删除()之后。如果我这样做,那么它当然有效,但是我的脚本执行时间太长了。
方法remove()
或add()
不对数据库执行任何操作 - flush()
执行。因此,您仍然会得到与remove()
之前相同的findOneBy
结果 - 您必须调用flush()
才能在数据库上执行INSERT
、UPDATE
或DELETE
刷新应将更改提交到数据库。但是,实体经理应注意尚未刷新的更改。
您可以在不刷新时从实体管理器获得虚拟数据集。
来自教义文档的更新:就像持久一样,对实体调用 remove 不会导致在数据库上立即发出 SQL 删除。该实体将在下次调用涉及该实体的 EntityManager#flush() 时删除。这意味着仍可以查询计划删除的实体并将其显示在查询和集合结果中。
删除实体后,其内存中状态与删除前相同,但生成的标识符除外。