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中的实体和模型有啥区别