PreUpdate级联实体持久化symfony 2.3

Ang*_*gel 2 entity cascade updates persist symfony

我对PreUpdate HasLifecycleCallbacks有一些问题.

我有一个实体,假设"A"与实体"B"具有OneToOne关系.所以我有:

/**
 * @ORM\Entity()
 * @ORM\HasLifecycleCallbacks
 */
 class A
{
    /**
     * @ORM\OneToOne(targetEntity="B", inversedBy="attrA", cascade={"persist", "remove"})
     * @ORM\JoinColumn(name="fieldB", referencedColumnName="id")
     */
    private $attrB;

    public function __construct()
    {
        $this->attrB = new B();
    }

    /**
     * @ORM\PrePersist
     * @ORM\PreUpdate
     */
    public function updateSomthing(){
        //$gestor = fopen("/pruebitas.txt", "r");
        $this->attrB->setDate($this->getDate());
   }
}
Run Code Online (Sandbox Code Playgroud)

B级是:

class B
{
    /**
     * @ORM\OneToOne(targetEntity="A", mappedBy="attrB")
     */
    private $attrA;
}
Run Code Online (Sandbox Code Playgroud)

当我创建一个新的实体A,一切正常,问题是当我更新实体A时,PreUpdate函数是fire,(因为它在注释行中创建文件),但实体B不会在数据库中持久存在,即使B中的字段应该更新.

有没有想法在PreUpdate上级联持久化?

谢谢!!

flu*_*flu 10

preFlush改用

preUpdate事件的Doctrine文档:

在此事件中永远不允许对更新实体的关联进行更改,因为在刷新操作的此时,Doctrine无法保证正确处理引用完整性.

这是有道理的,因此您需要在所有变更集由工作单元生成之前对关联实体进行更改.这就是preFlush事件的目的.

preFlush在EntityManager#flush()之前调用.可以在其侦听器内安全地调用EntityManager#flush().

只需用你的@ORM\PreUpdate注释替换@ORM\PreFlush它,它应该工作.

preFlush事件自Doctrine 2.2开始提供.

学说文档:"事件 - preFlush"

Doctrine bug tracker:"preFlush event and lifecycle callback "