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