我正在使用
$em->refresh($entity);
在我的功能测试中刷新实体并在对其进行一些更改后对其内容进行断言。
实体与另一个实体具有oneToMany关联,并且在关系上设置了级联操作“刷新”。
// AppBundle/Entity/Item.php
/**
* @ORM\OneToMany(targetEntity="ItemPackage", mappedBy="item", cascade={"refresh"})
*/
private $packages;
现在,即使我在测试中调用$this->em->refresh($item);
,包集合也不会刷新,并且仍然保留过时的数据(例如已经删除但不再存储在数据库中的包)。
如果我执行以下操作并手动刷新集合中的每个包,我就能获得实际数据
// AppBundle/Tests/ItemControllerTest.php
$this->em->refresh($item);
$packages = $item->getPackages();
foreach($packages as $package) {
$this->em->refresh($package);
}
$this->assertEquals(...);
根据此What cascade "refresh" means in Doctrine 2?和文档here,刷新操作应该如我所料。为什么我必须手动刷新集合的每个成员?我在这里做错了什么?