Doctrine Listener:修改链接的实体

时间:2014-05-26 14:14:51

标签: zend-framework doctrine-orm

我使用doctrine事件监听器在更新事件上添加操作。当我的实体更新时,我想要另一个更改。这两个实体是通过oneToMany关系链接的,但是我改变的那个实体并没有在"右边"级联关系的一面。

有一个代码示例,可以更好地理解。

Entities\Test:
  type: entity
  entityListeners:
    Listeners\Test
  manyToOne:
    counter:
      targetEntity: Entities\Counter
      inversedBy: tests
      joinColumn:
        name: counterId
        referencedColumnName: id
        onUpdate: CASCADE

Entities\Counter:
  type: entity
  oneToMany:
    tests:
      targetEntity: Entities\Test
      mappedBy: counter
      cascade: ["persist"]

我的听众:

class Counter
{
  public function preUpdate(Test $oTest, LifecycleEventArgs $oEvent)
  {
    $oTest->getCounter()->setUpdateVar(1);
  }
}

我可以使用$ oTest-> getCounter()或$ oEvent-> getEntity() - > getCounter()甚至使用persist()但计数器var永远不会改变。

任何人都知道如何做到这一点?

2 个答案:

答案 0 :(得分:1)

您是否尝试过postUpdate方法?

class Counter
{
  public function postUpdate(Test $oTest, LifecycleEventArgs $oEvent)
  {
    $oTest->getCounter()->setUpdateVar(1);
    $oEvent->getEntityManager()->flush($oTest->getCounter());
  }
}

从这里开始,您将能够刷新您的关联实体。我认为它可以正常工作;)

答案 1 :(得分:0)

您可能需要保留Counter实体:

class TestListener extends 
{
    public function preUpdate(Test $oTest, LifecycleEventArgs $oEvent)
    {
       $oTest->getCounter()->setUpdateVar(1);
       $oEvent->getEntityManager()->persist($oTest->getCounter());
    }
}