在所有postUpdate事件之后插入了ManyToMany连接表行?

时间:2019-03-29 14:31:08

标签: doctrine

我有一个具有多对多关联(带有连接表)的实体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

    }
}

查看日志,可以看到在最后一个事件侦听器完成之后插入了该行。

0 个答案:

没有答案