Php Symfony2和条令-插入时生成代码

Php Symfony2和条令-插入时生成代码,php,database,symfony,callback,doctrine,Php,Database,Symfony,Callback,Doctrine,使用Symfon2.0和条令,我尝试执行以下操作: 在数据库中插入新行 在插入时,自动生成一个代码并插入它 该代码与表的ID相关。类似于/row\u id 我怎样才能轻松地做到这一点 我一直在尝试Livecycle回调。但是: 预科生仍然没有身份证 PostPersist有ID,但不知何故插入已经完成,尽管我可以从实体中设置任何属性,但我不知道如何使它“再次”持久化到数据库 那边有线索吗 是否有其他方法可以正确执行此操作?在“创建控制器”中: 第二个块($entity->setCode…)是

使用Symfon2.0和条令,我尝试执行以下操作:

  • 在数据库中插入新行
  • 在插入时,自动生成一个代码并插入它
  • 该代码与表的ID相关。类似于
    /row\u id
  • 我怎样才能轻松地做到这一点

    我一直在尝试Livecycle回调。但是:

    • 预科生仍然没有身份证
    • PostPersist有ID,但不知何故插入已经完成,尽管我可以从实体中设置任何属性,但我不知道如何使它“再次”持久化到数据库
    那边有线索吗


    是否有其他方法可以正确执行此操作?

    在“创建控制器”中:

    第二个块($entity->setCode…)是您需要添加的块,需要根据您的目的进行自定义

    或者,您可以使用侦听器:


    问题是:若你们在PostPersist中做了一些事情并再次坚持,你们会得到另一个PostPersist…在无穷远处。数据库触发器很难看,但可以工作。作为一种解决方法,他只能在实体的属性仍然为空时更新该属性的值。
    
    if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->persist($entity);
            $em->flush();
    
            $entity->setCode($code);
            $em->persist($entity);
            $em->flush();
    
            return $this->redirect($this->generateUrl('entity_show'
               ,array('id' => $entity->getId())));
        }
    
    <?php
    
    namespace ormed\ormedBundle\Listener;
    
    use Doctrine\ORM\Event\OnFlushEventArgs; use
    Symfony\Component\DependencyInjection\Container;
    
    class LastModifiedListener {
    
      private $container;
    
      public function __construct(Container $container){$this->container = $container;}
    
      public function onFlush(OnFlushEventArgs $eventArgs)
      {
          $entityManager = $eventArgs->getEntityManager();
          $unitOfWork = $entityManager->getUnitOfWork();
    
          foreach ($unitOfWork->getScheduledEntityInsertions() AS $entity) {
              $entity->setCode( $code );
    
              $entityManager->persist($entity);
              $classMetadata = $entityManager->getClassMetadata(get_class($entity));
              $unitOfWork->recomputeSingleEntityChangeSet($classMetadata, $entity);
    } } }