【问题标题】:Doctrine Listener : Modify linked entityDoctrine Listener:修改链接实体
【发布时间】:2014-05-26 14:14:51
【问题描述】:

我正在使用一个学说事件侦听器来添加对更新事件的操作。当我的实体更新时,我也希望改变另一个实体。这两个实体通过 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() 但计数器变量永远不会改变。

有人知道我该怎么做吗?

【问题讨论】:

    标签: zend-framework doctrine-orm


    【解决方案1】:

    你试过postUpdate方法吗?

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

    从这里,您将能够刷新您的关联实体。我认为它会像那样工作得很好;)

    【讨论】:

      【解决方案2】:

      您可能需要持久化Counter 实体:

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

      【讨论】:

      • 我已经尝试过了,但没有成功。我也尝试过使用 UnitOfWork 函数,但都不起作用。
      猜你喜欢
      • 2015-08-24
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2020-06-14
      • 2014-04-08
      • 2013-06-05
      相关资源
      最近更新 更多