gpt4 book ai didi

events - Doctrine 2 preFlush 事件添加关联类

转载 作者:行者123 更新时间:2023-12-04 15:35:11 25 4
gpt4 key购买 nike

我正在尝试将用户实体添加到 preFlush 事件上的实体。基本上每个实体都有一个 createdBy,它是一个 User 实体。

每当我尝试此操作时,都会收到以下错误。

Notice: Undefined index: 0000000055f036b6000000009c9cc58f in /dir/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php line 870 

这是我的 preFlush 函数。
public function preFlush(PreFlushEventArgs $args)
{
$em = $args->getEntityManager();
$uow = $em->getUnitOfWork();
$securityContext = $this->container->get('security.context');
if($securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')
|| $securityContext->isGranted('IS_AUTHENTICATED_FULLY'))
{
$user = $securityContext->getToken()->getUser();
}
if(!$user)
{
$user = $em->getRepository('NAB\EnterpriseBundle\Entity\User')->findOneByUsername($this->username);
}
foreach ($uow->getScheduledEntityInsertions() as $entity)
{
$entity->setCreatedBy($user);
$em->persist($user);

}
$meta = $em->getClassMetadata(get_class($entity));
$uow->recomputeSingleEntityChangeSet($meta, $entity);
$uow->computeChangeSets($meta, $entity);
}

我究竟做错了什么?

最佳答案

您正在错误地计算变更集。以下位:

$meta = $em->getClassMetadata(get_class($entity));
$uow->recomputeSingleEntityChangeSet($meta, $entity);
$uow->computeChangeSets($meta, $entity);

仅在检查上下文中的最后一个实体上执行。

你应该把它移到你的 foreach 中:

foreach ($uow->getScheduledEntityInsertions() as $entity) {
$entity->setCreatedBy($user);
$em->persist($user);

$meta = $em->getClassMetadata(get_class($entity));

$uow->recomputeSingleEntityChangeSet($meta, $entity);
}

更好的是(因为您不熟悉 UnitOfWork API),您可以仅在最后重新计算所有变更集:

foreach ($uow->getScheduledEntityInsertions() as $entity) {
$entity->setCreatedBy($user);
$em->persist($user);
}

$uow->computeChangeSets();

你也应该从 preFlush 移动这个监听器至 onFlush处理其他监听器应用的任何更改。

关于events - Doctrine 2 preFlush 事件添加关联类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15267712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com