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