database - symfony2 在 flush() 之后立即从数据库中拉出是不可能的?

标签 database symfony doctrine flush

(请参阅问题的最后一行以获取解决方案)

我何时可以从数据库中提取刷新值是否有时间限制?

因为当我添加一个实体并像这样将它刷新到数据库中时...

        //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/

相关文章:

mysql - 使用行中的数据回顾性更新mysql列

android - 如何在模拟器上查看Android SQLite数据库

database - Delphi:主/详细数据集出现 "Invalid field type"错误

Jquery 使用数组中的数据创建选择标签

symfony - 获取 Symfony2 存储库中的字段类型

mysql - 容纳单个小数的最小 mysql 类型

css - Symfony2 Assetic 在 css/less 文件中错误的 cssrewrite 资源路径

symfony - 使用 Doctrine2 扩展 Symfony2 中的实体

Doctrine 迁移 : create code for mysql and postgresql

php - 在 Doctrine 中使用字符串、blob 或 clob 作为线程体?