我使用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永远不会改变。
任何人都知道如何做到这一点?
答案 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());
}
}