我有一个名为" refNo
"在名为" Job
"的对象中,此数字是通过将状态缩写和 id + 2023 创建的。这意味着,如果这项工作在加利福尼亚州完成,且该对象的id为2,那么refNo必须是:CA-2025
。
我有这段代码:
public function __construct()
{
$this->refNo = $this->state . '-'. ($this->id + 2023);
}
这会使每个人都识别CA-2023,这意味着在创建id之前不会生成id。我尝试过以这种方式使用这些@HasLifecycleCallbacks: prePersist , postPersist , preFlush , onFlush
:
/**
* @PostPersist
*/
public function jobNo()
{
$this->jobNo = $this->id + 2286;
}
没有运气。无论如何我怎么能做到这一点?感谢
答案 0 :(得分:1)
问题是您在数据库中创建了一个实体并获得了ID。然后调用@PostPersist
方法并设置jobNo
。但是,您不会再flush
,因此即使您设置了jobNo
,也不会将其实际保存在数据库中。
解决方案是在之后再次将其重新保存在数据库中。
答案 1 :(得分:0)
我使用单独的事件侦听器为各种实体生成代码。这是在创建实体后唤起$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 }