我有一个具有多对多关联(带有连接表)的实体A。
在这个实体上,我已经为PostUpdate
事件注册了一个事件监听器。
在此事件中,我要发出数据库查询。但是,侦听器是在执行SQL INSERT语句之前执行的,因此PostUpdate侦听器看不到更新结果。
另一方面,更改为例如我的实体的整数字段在PostUpdate之前执行!
class A {
/**
* @ORM\Column(type="integer")
*/
public $position = 0;
/**
* @ORM\ManyToMany(targetEntity="B")
* @ORM\JoinTable(name="jointable",
* joinColumns={@ORM\JoinColumn(name="a", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="b", referencedColumnName="id")})
* @ORM\Cache(usage="NONSTRICT_READ_WRITE")
*/
public $manytomany;
}
执行此代码时:
$a = getAFromRepo();
$b = getBFromRepo();
$a->position = 555;
$a->manytomany->add($b);
$em->flush();
侦听器,例如:
class PostUpdateListener {
private $em;
public function postUpdate(LifecycleEventArgs $args){
var_dump($this->em->getConnection()->executeQuery(
"SELECT position FROM a WHERE a = :id",
['id' => $args->getEntity()->getId()]); // <------ shows updated value
var_dump($this->em->getConnection()->executeQuery(
"SELECT data_category FROM jointable WHERE a = :id",
['id' => $args->getEntity()->getId()]); <-------- new row is missing
}
}
查看日志,可以看到在最后一个事件侦听器完成之后插入了该行。