[英]cascade={“persist”} doesn't work when entity is updated (but it does at the creation)
我有两个实体,它们之间有一个ManyToOne关系。
我的第一个实体看起来像这样:
<?php
[...] //namespace, use and stuff
/**
* @ORM\Table()
* @ORM\Entity(repositoryClass="Project\MyBundle\Entity\Entity1Repository")
* @ORM\HasLifecycleCallbacks()
*/
class Entity1
{
[...] //id and stuff
//
/**
* @ORM\OneToMany(targetEntity="Project\MyBundle\Entity\Entity2", mappedBy="entity1", cascade={"persist"})
*/
private $entities2;
//
public function __construct() {
$this->entities2 = new ArrayColleciont();
[...]
}
[...] // Getter Setter and stuff
//
/**
*@ORM\PreUpdate()
*@ORM\PrePersist()
*/
public function newEntity2() {
$this->entities2->add(new Entity2($this));
}
我的第二个样子是:
<?php
[...]//namespace, use and stuff
/**
* @ORM\Table()
* @ORM\Entity(repositoryClass="Project\MyBundle\Entity\Entity2Repository")
*/
class Entity2
{
[...]// id and stuff
//
/**
* @ORM\ManyToOne(targetEntity="Project\MyBundle\Entity\Entity1", inversedBy="Entities2")
*/
private $entity1;
//
public function __construct(Entity1 $entity1) {
$this->entity1 = $entity1;
[...]
}
重点是。 当我创建一个新的Entity1并将其持久化时,也会创建一个Entity2并将其保存在数据库中。 但是,当我仅更新Entity1时,仍将调用方法“ newEntity2”,但数据库中未保存任何内容。
我的猜测是,它来自cascade =“ persist”选项。
preUpdate为时已晚,无法更改任何内容。 已经计算出的更改和理论知道要运行哪些sql以保存更改。 (实际上是在运行sql更新之前发生的)
如果要跟踪更改(最好在创建实体时也会触发),onFlush是更好的选择。
只是不要忘记,在此阶段,如果您更改属性或创建/删除实体,则需要手动询问原则以重新检查所做的更改。 (请阅读教义文档中代码示例下的代码行: http : //doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/events.html#onflush )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.