PreUpdate实体symfony LifecycleCallbacks

时间:2013-07-23 11:07:28

标签: symfony doctrine-orm lifecycle persist

我对Symfony中的PreUpdate LifecycleCallbacks有一点问题。

我有一个与实体产品具有OneToMany关系的实体用户。

class User{
     /**
     * @ORM\OneToMany(targetEntity="Product", mappedBy="formulario", cascade={"persist", "remove"})
     */
    private $products;
}

class Product{
     /**
     * @ORM\ManyToOne(targetEntity="User", inversedBy="products")
     * @ORM\JoinColumn(name="user", referencedColumnName="id")
     */
    private $user;
}

我的问题是当我向用户添加或删除产品时。如果有这种情况,我想启动一个PreUpdate函数来对用户实体进行一些更改。但是,当从用户更改实体产品时,PreUpdate不会触发。

非常感谢!!!

2 个答案:

答案 0 :(得分:2)

使用preUpdate侦听器不允许更改相关实体。

  

永远不允许对更新后的实体的关联进行更改   这个事件,因为Doctrine无法保证正确处理   刷新操作此时的参照完整性。

...来自documentation

答案 1 :(得分:0)

我遇到了同样的问题,我通过preUpdate()中的更新$ user解决了这个问题,然后安排了额外的更新:

    $args->getEntityManager()->getUnitOfWork()->scheduleExtraUpdate($user, array(
        'field_name' => array($oldValue, $newValue)
    ));