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开始提供.
Doctrine bug tracker:"preFlush event and lifecycle callback "
归档时间: |
|
查看次数: |
4282 次 |
最近记录: |