学说:从 ID 生成参考号
Doctrine : Generate Reference number from ID
我在一个名为“Job
”的对象中有一个名为“refNo
”的字段,这个数字是通过将 state initials 和id + 2023。意思是,如果这个工作是在加利福尼亚完成的,并且这个对象的 id 是 2,那么 refNo 必须是:CA-2025
.
我有这个代码:
public function __construct()
{
$this->refNo = $this->state . '-'. ($this->id + 2023);
}
这将使每个人的 ID 为 CA-2023,这意味着在创建之前不会生成 ID。我试过以这种方式使用这些 @HasLifecycleCallbacks: prePersist , postPersist , preFlush , onFlush
:
/**
* @PostPersist
*/
public function jobNo()
{
$this->jobNo = $this->id + 2286;
}
运气不好。无论如何我怎么能做到这一点?谢谢
问题是您在数据库中创建了一个实体并为其分配了 ID。然后你的 @PostPersist
方法被调用并设置 jobNo
。但是,您不会在它之后再次 flush
,所以即使您的 jobNo
已设置 ,您也不会真正将其保存在数据库中。
解决方法是之后重新存入数据库
我正在使用单独的事件侦听器为各种实体生成代码。这是创建实体后调用 $entity->generateRef();
的简化示例。
<?php
namespace Example\CommonBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
class CodeAssembler
{
public function postPersist(LifecycleEventArgs $args)
{
$classes = array(
'Example\CommonBundle\Entity\Job',
);
$entity = $args->getEntity();
if (in_array(get_class($entity), $classes)) {
$entity->generateRef();
$args->getEntityManager()->flush();
}
}
}
附加事件侦听器:
# services.yml
example_common.code_assembler_listener:
class: Example\CommonBundle\EventListener\CodeAssembler
tags:
- { name: doctrine.event_listener, event: postPersist }
我在一个名为“Job
”的对象中有一个名为“refNo
”的字段,这个数字是通过将 state initials 和id + 2023。意思是,如果这个工作是在加利福尼亚完成的,并且这个对象的 id 是 2,那么 refNo 必须是:CA-2025
.
我有这个代码:
public function __construct()
{
$this->refNo = $this->state . '-'. ($this->id + 2023);
}
这将使每个人的 ID 为 CA-2023,这意味着在创建之前不会生成 ID。我试过以这种方式使用这些 @HasLifecycleCallbacks: prePersist , postPersist , preFlush , onFlush
:
/**
* @PostPersist
*/
public function jobNo()
{
$this->jobNo = $this->id + 2286;
}
运气不好。无论如何我怎么能做到这一点?谢谢
问题是您在数据库中创建了一个实体并为其分配了 ID。然后你的 @PostPersist
方法被调用并设置 jobNo
。但是,您不会在它之后再次 flush
,所以即使您的 jobNo
已设置 ,您也不会真正将其保存在数据库中。
解决方法是之后重新存入数据库
我正在使用单独的事件侦听器为各种实体生成代码。这是创建实体后调用 $entity->generateRef();
的简化示例。
<?php
namespace Example\CommonBundle\EventListener;
use Doctrine\ORM\Event\LifecycleEventArgs;
class CodeAssembler
{
public function postPersist(LifecycleEventArgs $args)
{
$classes = array(
'Example\CommonBundle\Entity\Job',
);
$entity = $args->getEntity();
if (in_array(get_class($entity), $classes)) {
$entity->generateRef();
$args->getEntityManager()->flush();
}
}
}
附加事件侦听器:
# services.yml
example_common.code_assembler_listener:
class: Example\CommonBundle\EventListener\CodeAssembler
tags:
- { name: doctrine.event_listener, event: postPersist }