postPersist 操作 - 持久化另一个实体
postPersist action - persist another entity
[编辑]
- 根据 goto 的回答,我编辑了
ProjectListener.php
文件。
[设置]
- Symfony 3.4
Projet
实体
- 其他子实体
[问题]
每次 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);
}
[编辑]
- 根据 goto 的回答,我编辑了
ProjectListener.php
文件。
[设置]
- Symfony 3.4
Projet
实体- 其他子实体
[问题]
每次 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);
}