出于某种原因,我希望我的实体类别中的ID在其他字段中重复(ID2)
要做到这一点,我使用PostPersist。我试过这个(见下面的代码)
但字段ID2仍为NULL值。
/**
* Category
* @ORM\HasLifecycleCallbacks()
*/
class Category
{
/**
* @var integer
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var integer
* @ORM\Column(name="idpo", nullable=true, type="integer")
*/
private $id2;
/**
* @ORM\PostPersist()
*/
public function duplicateId()
{
$id = $this->getId();
$this->id2 = $id;
}
}
答案 0 :(得分:1)
使用doctrine侦听器来访问EntityManager并再次保留实体:
<强>的src /你/ OwnBundle /资源/配置/ services.yml 强>
services:
yob.listener.category:
class: Your\OwnBundle\Listener\CategoryListener
tags :
- { name: doctrine.event_subscriber, connection: default }
<强>的src /你/ OwnBundle /监听器/ CategoryListener.php 强>
<?php
namespace Your\OwnBundle\Listener;
use Doctrine\Common\EventSubscriber;
use Doctrine\ORM\Event\LifecycleEventArgs;
use Your\OwnBundle\Entity\Category;
class CategoryListener implements EventSubscriber
{
/**
* @return array
*/
public function getSubscribedEvents()
{
return [
'postPersist'
];
}
/**
* @param LifecycleEventArgs $event
*/
public function postPersist(LifecycleEventArgs $event)
{
$entity = $event->getEntity();
$em = $event->getEntityManager();
if ($entity instanceof Category) {
$entity->duplicateId();
$em->persist($entity);
$em->flush();
}
}
}
但是,重复使用相同的字段会非常奇怪......
顺便说一句,你也可以使用实体听众,但我还没有看到它http://docs.doctrine-project.org/en/latest/reference/events.html#entity-listeners