postPersist 操作 - 持久化另一个实体

postPersist action - persist another entity

[编辑]

[设置]

[问题]

每次 Projet 实体被持久化,它后面应该有一些子实体。

我目前有一个 ProjetListener class 可以处理 prePersist()preUpdate() 以及 postPersist() 事件。

AppBundle/Listener/ProjetListener.php

class ProjetListener {
    private $tokenStorage;

    public function __construct(TokenStorage $tokenStorage) {
        $this->tokenStorage=$tokenStorage;
    }

    public function prePersist(Projet $projet, LifecycleEventArgs $args) {
        $projet->setUtilisateur($this->tokenStorage->getToken()->getUser())
               ->setCreation(new \DateTime())
               ->setModification(new \DateTime())
               ->setSupprime(false);
    }

    public function preUpdate(Projet $projet, PreUpdateEventArgs $args) {
        $projet->setModification(new \DateTime());
    }

    public function postPersist(Projet $projet, LifecycleEventArgs $args) {
        $tremie=new Tremie();
        $tremie->setPosition(false)
               ->setForme(0)
               ->setTra(2000)
               ->setTr1(2000)
               ->setTr2(2000)
               ->setTre3(2000)
               ->setDecalTra(0)
               ->setDebordTr1(0)
               ->setDebordTr2(0)
               ->setReculMax(3500)
               ->setProjet($projet);
        $em=$args->getEntityManager();
        $em->persist($tremie);
    }
}

一旦我的 Projet 实体被持久化,我想持久化一个 Tremie 实体,并将 Projet 设置为它的父实体。
就像现在一样,postPersist() 事件不会保留 Tremie 实体。

Symfony 成功创建了一个 Projet 实体,但之后没有创建 Tremie 实体。
没有返回错误。

什么东西added/edited一持久化Projet就持久化Tremie,并设置Projet为他的父级?

您可以使用

访问实体管理器
$entityManager = $args->getEntityManager();

你也许可以这样做:(我从未尝试过)

public function prePersist(Projet $projet, LifecycleEventArgs $args) {
    $projet->setUtilisateur($this->tokenStorage->getToken()->getUser())
           ->setCreation(new \DateTime())
           ->setModification(new \DateTime())
           ->setSupprime(false);

    $tremie->setPosition(false)
           ->setForme(0)
           ->setTra(2000)
           ->setTr1(2000)
           ->setTr2(2000)
           ->setTre3(2000)
           ->setDecalTra(0)
           ->setDebordTr1(0)
           ->setDebordTr2(0)
           ->setReculMax(3500)
           ->setProjet($project);
    $args->getEntityManager()->persist($tremie);
}