更改集合字段(添加或删除)时不会触发LifeCycleCallback

时间:2018-09-30 09:13:40

标签: symfony doctrine-orm doctrine symfony-3.4

我正在使用Symfony3.4,当我更新Vente Entity的实例时,有两种情况:

  • 如果我至少更新了一个简单字段,例如(date,int,string等...)=>会触发“ PreUpdateCallback ”回调

  • 当我通过添加/删除/更新行来仅更新 collection $ elementsVente 时,该回调=>回调“ PreUpdateCallback ”不被解雇

那么,怎么回事,有没有解决此问题的解决方案。

谢谢。

出借实体

/**
 * Vente
 *
 * @ORM\Table(name="vente")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\VenteRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Vente
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="date", type="datetime")
     */
    private $date;

    /**
     * @var \Doctrine\Common\Collections\Collection
     * @Assert2\ElementVente()
     *
     * @ORM\OneToMany(targetEntity="ElementVente", mappedBy="vente", cascade={"persist", "remove"}, orphanRemoval=TRUE)
     */
    private $elementsVente;

    //...

  /*
  * @ORM\PreUpdate
  */
 public function preUpdateCallback()
 {
     die('fired');
 }
}

1 个答案:

答案 0 :(得分:2)

PreUpdate生命周期事件是Doctrine的UnitOfWork组件的triggered。从代码中可以看出-它是在executeUpdates方法内部触发的,该方法负责更新单个实体。因此,此事件意味着将用于实体本身,而与集合更改无关。