(请参阅问题的最后一行以获取解决方案)
我何时可以从数据库中提取刷新值是否有时间限制?
因为当我添加一个实体并像这样将它刷新到数据库中时...
//Persist the entity and flush it to DB
$em->persist($entity);
$em->flush();
$helper->log('success', 'Innehållet <strong>'. $entity->getTitle() .'</strong> (id:<strong>'. $entity->getId() .'</strong>) har skapats i '.$place.$purified. $videoMessage);
$helper->generateManifestForAll( $currentCompany->getId() );
$helper->log('success', 'Manifest & slideData updated');
并尝试在 $helper->generateManifestForAll() 中读取它,它还不存在。如果我通过添加另一个实体来重复该过程,那么将包含第一个实体(但自然不会包含第二个实体。直到我创建第三个实体...)。
如果我之后手动触发 generateManifestForAll() 也可以包含新实体,所以这似乎是它们位于同一个 Controller 或其他东西中的问题..?
----------------更新------------------------
这可能与 generateManifestForAll() 在服务内部这一事实有关吗?
首先,我实例化服务对象 $helper(其中注入(inject)了一个 entityManager),然后我在我的 Controller 中使用 $em->flush()。最后我运行 generateManifestForAll() 来提取数据。
我可以粘贴所有代码,但它太多了,我想也许您可以在这里检测到概念中的错误?
--------------------另一个更新--------------------
这两个调试循环给我完全相同的输出。
//debug
echo "beforeFlush<br/>";
$data = $entity->getContainer()->getContent();
foreach($data as $d) {
echo $d->getTitle().'<br/>';
}
//Persist the entity and flush it to DB
$em->persist($entity);
$em->flush();
$em->refresh($entity);
//debug
echo " ";
echo "<br/><br/>afterFlush<br/>";
$data = $entity->getContainer()->getContent();
foreach($data as $d) {
echo $d->getTitle().'<br/>';
}
die;
和最终的解决方案 - 在我的例子中,显然调用刷新
$em->refresh($entity->getContainer());
因为那是我正在循环的实体。
最佳答案
是的,你可以。
如果这不起作用,试试这个:
$em->persist($entity);
$em->flush();
$em->refresh();
顺便说一句,我建议你使用 DoctrineEventListener 来保存日志。
参见:
http://docs.doctrine-project.org/en/2.0.x/reference/events.html http://symfony.com/doc/current/cookbook/doctrine/event_listeners_subscribers.html preUpdate and postUpdate events not triggered on Doctrine 2
我知道文档有点困惑。
关于database - symfony2 在 flush() 之后立即从数据库中拉出是不可能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23956299/