坚持在一个控制器中并在另一个控制器中冲洗

时间:2014-02-02 18:07:46

标签: symfony doctrine-orm flush persist

为谷歌搜索者编辑: 不可能坚持在一个控制器中并在另一个控制器中冲洗。

我有两个控制器,由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:我有一个测试控制器,我坚持并刷新,并在数据库中完成更改。

1 个答案:

答案 0 :(得分:3)

请求之间不会记住

persist()次来电。

因此,您无法在一个请求中调用persist(),在后续请求中调用flush()

您需要实现一个缓存逻辑(即保存在会话中标记为持久性的实体)才能使其正常工作。