У меня есть продукт с идентификатором autogenarete, а также поле с кодом продукта, которое собирает значения на основе выбора пользователя в сочетании с автоматически сгенерированным ключом для создания кода продукта.Однако я не могу взять идентификатор автогената при вставке нового продукта.
Я использовал первые предварительные списки и предварительные версии, но это не захватывает идентификатор при вставке нового продукта.только при обновлении захватывает идентификатор
/**
* @ORM\PrePersist
* @ORM\PreUpdate
*/
public function setProductcode()
{
$option1 = $this->option1;
$option2 = $this->option2;
$id = $this->id;
$whole = $option1.''.$option2.''.$id;
$this->productcode = $whole;
}
я пытаюсь использовать postpersist, и меняю свое поле на nullablae true, но он сохраняет код продукта как ноль.
/**
* @var string
*
* @ORM\Column(type="string", length=191, unique=true, nullable=true)
*/
private $productcode;
Я использовал postloadи postpersist вместе, и он действительно показывает код продукта как вывод ... но он не сохраняет его в БД.
* @ORM\PostLoad
* @ORM\PostPersist
Как я могу получить идентификатор в сущности, чтобы поместить его в дополнительное поле?Заранее спасибо!
edit
Я сделал easyadminsubcriber, и он работает, когда я использую возвращение pre_persist.Однако приведенный ниже код обновляется до post_persist.но у меня проблемы с реализацией функции сброса вместе с lifecycleeventargs.
я получил следующую ошибку
Argument 2 passed to App\EventSubscriber\EasyAdminSubscriber::setProductcode() must be an instance of Doctrine\Common\Persistence\Event\LifecycleEventArgs, string given, called in
ниже мой код post_persist
<?php
# src/EventSubscriber/EasyAdminSubscriber.php
namespace App\EventSubscriber;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\EventDispatcher\GenericEvent;
use App\Entity\Product;
use Doctrine\Common\Persistence\Event\LifecycleEventArgs;
class EasyAdminSubscriber implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return array(
'easy_admin.post_persist' => array('setProductcode'),
);
}
/**
* @param LifecycleEventArgs $args
*/
public function setProductcode(GenericEvent $event, LifecycleEventArgs $args)
{
$entityManager = $args->getEntityManager();
$entity = $event->getSubject();
if (!($entity instanceof Product)) {
return;
}
$whole = 'yooo';
$entityManager->flush();
$entity->setProductcode($whole);
$event['entity'] = $entity;
}
}