symfony2在刷新()后不能从DB拉出来吗?

时间:2014-05-30 13:55:11

标签: database symfony doctrine flush

(参见最后解决问题的方法)

我何时可以从数据库中提取已刷新的值?

因为当我添加一个实体并将其刷新到这样的DB中时......

        //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-&gt; generateManifestForAll()内部读回来它还没有存在。如果我通过添加另一个实体重复该过程,则包含第一个实体(但不包括第二个实体,自然。直到我创建第三个实体...)。

如果我之后手动触发generateManifestForAll()也可以包含新实体,那么它们似乎是坐在同一个控制器内的问题......?

------------------ UPDATE --------------------------

它可能与generateManifestForAll()在服务中的事实有关吗?

首先我实例化服务对象$ helper(其中注入了entityManager),然后在我的控制器中使用$ em-&gt; 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());

因为这是我从中汲取的实体。

1 个答案:

答案 0 :(得分:3)

是的,你可以。

如果这不起作用,请尝试:

$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

我知道文件有点令人困惑。