我可以使用PostPersist获取我的新记录的ID,并在ID2字段中保留/复制它

时间:2014-12-06 15:06:13

标签: symfony doctrine

出于某种原因,我希望我的实体类别中的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;       
    }
}

1 个答案:

答案 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