为谷歌搜索者编辑: 不可能坚持在一个控制器中并在另一个控制器中冲洗。
我有两个控制器,由ajax调用。当树枝发生变化时,第一个被调用,这就是我坚持的地方。
单击“保存”按钮时会调用第二个按钮,这就是我调用flush时的情况。
不幸的是,它不会改变数据库中的任何内容。
这是我的控制器:
public function update_accountAction(Request $request)
{
Try
{
$code = $request->request->get('code');
$name = $request->request->get('name');
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('NRtworksChartOfAccountsBundle:Accounttree');
$to_change = new Accounttree();
$to_change = $repo->findOneByCode($code);
$to_change->setName($name);
$to_change->setCode($code);
$em->persist($to_change);
$response = array("code" => 100, "success" => true, "modified" => $code);
return new Response(json_encode($response));
}
Catch(Exception $e)
{
$response = array("code" => 100, "success" => false, "error" => $e);
return new Response($response);
}
}
下一个:
public function save_changesAction()
{
Try
{
$em = $this->getDoctrine()->getManager();
$em->flush();
$response = array("code" => 100, "success" => true);
return new Response(json_encode($response));
}
Catch(Exception $e)
{
$response = array("code" => 100, "success" => false, "error" => $e);
return new Response($response);
}
$response = array("code" => 100, "success" => true);
return new Response(json_encode($response));
}
显然没有发生错误,但没有进行任何更改。
我在想的问题是实体经理仅限于一个控制器,但我没有成功将其称为外部...
帮助?
ps:我有一个测试控制器,我坚持并刷新,并在数据库中完成更改。
答案 0 :(得分:3)
persist()
次来电。
因此,您无法在一个请求中调用persist()
,在后续请求中调用flush()
。
您需要实现一个缓存逻辑(即保存在会话中标记为持久性的实体)才能使其正常工作。