我对 PreUpdate HasLifecycleCallbacks 有一些问题。
我有一个实体,假设“A”与实体“B”有一对一关系。
所以我有:
/**
* @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());
}
}
B类是:
class B
{
/**
* @ORM\OneToOne(targetEntity="A", mappedBy="attrB")
*/
private $attrA;
}
当我创建一个新的实体 A 时,一切正常,问题是当我更新实体 A 时,PreUpdate 函数会触发(因为它在注释行中创建文件),但实体 B 不会保留在数据库中,即使 B 中的字段应该更新。
有什么想法可以在 PreUpdate 上级联持久化吗?
Thanks!!
Use preFlush
instead
从教义文档preUpdate
event:
决不允许更改已更新实体的关联
此事件,由于 Doctrine 无法保证正确处理
刷新操作此时的参照完整性。
这是有道理的,因此您需要在工作单元生成所有变更集之前对关联实体进行更改。这就是preFlush
活动是为了.
preFlush 在 EntityManager#flush() 之前被调用。
EntityManager#flush() 可以在其侦听器内安全地调用。
只需更换您的@ORM\PreUpdate
注释与@ORM\PreFlush
它应该有效。
The preFlush
该事件自教义 2.2 起可用。
学说文档:“事件 - preFlush” http://docs.doctrine-project.org/en/latest/reference/events.html#preflush
Doctrine bug 跟踪器:“preFlush 事件和生命周期回调 http://www.doctrine-project.org/jira/browse/DDC-1479"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)