我有一个实体被持续存在,在某些情况下,需要创建和坚持使用其他实体。
当前用例是在easyAdminbundle的列表视图中切换布尔属性时,我需要创建实体,并在设置为true时坚持它们。
我想在preUpdate
事件中这样做,因此我看了工作界面的单位,并试图理解一点。
我可以访问:
之类的方法$event->getEntityManager()->getUnitOfWork()->getScheduledEntityUpdates()
和
$event->getEntityManager()->getUnitOfWork()->getScheduledEntityInsetions()
所以,我抛弃了这些内容,并获得了1个条目,以供实体更新和空数组以插入。
然后添加了新实体:
$entity = new Entity();
$event->getEntityManager()->getUnitOfWork()->scheduleForInsert($entity);
毕竟,我再次倾倒了安排更新和插入以及正确弄清一切的所有内容。
array:1 [▼
"000000006b3c425d000000005d5d714c" => Entity {#1045 ▶}
]
插入时间表中该实体的数组密钥在更新时间表中具有相同的特征。
不幸的是没有执行插入查询。
是否有一种方法(乍一看似乎是乍一看(将对象添加到当前的工作单元以修改数据以更新/持续到预定事件中?
编辑(侦听器代码(:
/**
* @param Market $market
* @param LifecycleEventArgs $event
* @throws DoctrineORMORMException
*/
public function preUpdate(Market $market, LifecycleEventArgs $event)
{
$uow = $event->getEntityManager()->getUnitOfWork();
$changeset = $event->getEntityManager()->getUnitOfWork()->getEntityChangeSet($market);
if(isset($changeset['boolean_field']) && count($changeset['boolean_field']) == 2){
if(!$changeset['boolean_field'][1]){//THIS IS NO CONCERN AT THE MOMENT
$activations = $event->getEntityManager()->getRepository('BaseMapping:MarketWatchedByUser')
->findBy(['market' => $market]);
foreach ($activations as $a) {
$event->getEntityManager()->remove($a);
}
}
else{//THIS IS WHAT IS BEING TESTED
$users = $event->getEntityManager()->getRepository('UserBundle:User')
->findAll();
foreach ($users as $u) {
$activation = new MarketWatchedByUser();
$activation->setUser($u);
$activation->setMarket($market);
dump($event->getEntityManager()->getUnitOfWork()->isScheduledForInsert($activation));
$event->getEntityManager()->getUnitOfWork()->scheduleForInsert($activation);
dump($event->getEntityManager()->getUnitOfWork()->isScheduledForInsert($activation));
}
$event->getEntityManager()->getUnitOfWork()->commit();//ENDLESS LOOP
dump($event->getEntityManager()->getUnitOfWork()->getScheduledEntityUpdates());
dump($event->getEntityManager()->getUnitOfWork()->getScheduledEntityInsertions());
}
}
}
您要尝试执行的操作不允许在实体侦听器中,预期尤其是限制性的。
这看起来像商业逻辑。我建议将逻辑移至模型/处理程序。
您可以尝试添加自定义操作以不必在EasyAdminbundle内部进行摆弄。