前言:我的脚本有点复杂,所以我尝试将复杂性降低到一个简单的示例。
假设我们有一个实体“公司”。我们还有一个如下所示的存储库功能:
public function delete(){
// get company-objects to delete
[...]
// delete some companies
$this->getEntityManager()->remove($company1);
$this->getEntityManager()->remove($company2);
// do other things
[...]
// get companies via createQuery (I really need to do it via
// createQuery because of different reasons that would be too
// complicated to explain for this problem)
$query = $this->getEntityManager()
->createQuery('
SELECT company
FROM MyOwnBundle:Company company
WHERE [...irrelevant...]
');
$companies = $query->getResult();
dump($companies);
exit;
}
问题:createQuery 还选择了已删除的公司。
我的想法:
- 我认为 entityManager 知道公司已被删除,因此不会在查询中选择它们。但是这个想法是错误的......(但为什么会这样?entityManager 不是全局单例对象吗?)
- 我知道,当我在使用 createQuery 之前使用 flush() 保存数据时,结果会很好。但是我不能在这里保存数据,因为那样整个过程就不会发生在事务中。
- 我也无法操纵 createQuery 的 where 部分来排除已删除的公司,因为整个过程被分成许多功能,并且很难在整个过程中传输带有已删除公司的数组。
问题:我怎样才能通过 createQuery 获得没有删除的公司?