Symfony2 - Doctrine - 在实体管理器刷新调用中捕获错误

Posted

技术标签:

【中文标题】Symfony2 - Doctrine - 在实体管理器刷新调用中捕获错误【英文标题】:Symfony2 - Doctrine - error catched on entity manager flush call 【发布时间】:2016-12-15 14:25:40 【问题描述】:

我正在尝试更新AJAX 中同一表的两条记录/行

public function reorderApplications(Request $request)

    if (!$request->isXmlHttpRequest()) 
        return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
    

    $from = $request->request->get('from');
    $to = $request->request->get('to');

    $em = $this->getDoctrine()->getManager();
    /** @var Application $fromApplication */
    $fromApplication = $em->getRepository('IndexBundle:Application')->find($from['application']);
    /** @var Application $toApplication */
    $toApplication = $em->getRepository('IndexBundle:Application')->find($to['application']);

    try 
        $fromApplication->setOrder($to['position']);
        $toApplication->setOrder($from['position']);

        $em->flush();
        $response = array(
            'response' => 'success',
            'message' => 'Applications were reordered successfully.'
        );
     catch (\Exception $e) 
        $response = array(
            'response' => 'error',
            'message' => $e->getMessage()
        );
    

    return new JsonResponse($response, 200);

最终,try$em->flush() 失败,我得到错误:

执行 'UPDATE application SET order = 时发生异常 ?哪里 id = ?带参数 ["3", 4]:↵↵SQLSTATE[42000]: 语法错误 或访问冲突:1064 您的 SQL 语法有错误;查看 与您的 mysql 服务器版本相对应的手册 在第 1 行的 'order = '3' WHERE id = 4' 附近使用的语法

有人知道可能是什么问题吗?

【问题讨论】:

【参考方案1】:

order 是 SQL 中的保留关键字。

要在列名中使用它,您必须在定义中加上反引号:

@Column(name="`order`")

【讨论】:

哇,原来如此!谢谢!【参考方案2】:

order 是 mysql 中的保留关键字。尝试重命名该字段。

http://dev.mysql.com/doc/refman/5.7/en/keywords.html

【讨论】:

以上是关于Symfony2 - Doctrine - 在实体管理器刷新调用中捕获错误的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2/Doctrine:如何从实体类中持久化一个实体?

Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行

Symfony2/Doctrine - 与普通 SQL 相关的实体抽象

Symfony2 / Doctrine中的实体和模型有啥区别

问:Symfony2 - Doctrine - Class xxx 不是有效的实体或映射的超类

Symfony2 - 具有一对一关系的 Doctrine Save 实体