Symfony:flush()时出错

时间:2017-09-14 08:20:53

标签: php symfony doctrine

我是Symfony的初学者所以我按照教程回合Symfony 3.当我尝试冲洗()时出现错误

"This page isn't working
localhost didn't send any data
ERR_EMPTY_RESPONSE"

当我评论此行时,页面正常工作......这里是代码:

public function editAction($id, Request $request) {
    $em = $this->getDoctrine()->getManager();

    $advert = $em->getRepository('OCPlatformBundle:Advert')->find($id);

    if (null === $advert) {
      throw new NotFoundHttpException("L'annonce d'id ".$id." n'existe pas.");
    }

    $listCategories = $em->getRepository('OCPlatformBundle:Category')->findAll();

    foreach ($listCategories as $category) {
      $advert->addCategory($category);
    }

    $em->flush();

    if ($request->isMethod('POST')) {
      $request->getSession()->getFlashBag()->add('notice', 'Annonce bien modifiée.');

      return $this->redirectToRoute('oc_platform_view', array('id' => 5));
    }

    return $this->render('OCPlatformBundle:Advert:edit.html.twig', array(
      'advert' => $advert
    ));
}

有什么想法吗? 谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

您需要在刷新前调用$em->persist($yourEntityToPersist);

答案 1 :(得分:1)

您正在调用flush函数btu,您不会在数据库中保留任何内容。

$em->persist($entity);

因为当调用flush()方法时,Doctrine会查看它正在管理的所有对象,看它们是否需要持久保存到数据库中。

所以你什么都没有打电话给flush,代码就坏了。

你打电话

$advert->addCategory($category);

但是这个调用只会在内存中将类别添加到广告中,如果你想在你需要像这样坚持adver之后将这些数据放入你的数据库然后刷新

$em->persist($advert);
$em->flush();

在这种情况下,您不仅要在内存中将您的类别保存到数据库中

答案 2 :(得分:0)

使用Doctrine时,实体是否无效?

$em = $this->getDoctrine()->getManager();

$advert = $em->getRepository('OCPlatformBundle:Advert')->find($id);