Doctrine - Symfony查询错误

3

我遇到一个错误,但不知道如何修复它

$query = $entityManager->createQuery("UPDATE AppBundle:ChangeAPI SET `key`='asd123' WHERE `id` = 1");
$query->execute();

我的AppBundle:ChangeAPI

/**
 * @ORM\Entity
 * @ORM\Table(name="api")
 */
 class ChangeAPI
 {
     /**
      * @ORM\Column(type="integer")
      * @ORM\Id
      * @ORM\GeneratedValue(strategy="AUTO")
      */
     protected $id;

     /**
      * The date on which the shipment has been created
      *
      * @ORM\Column(type="string", name="key")
      */
     protected $key;

     /** Creates a new standard ride */
     function __construct()
     {
     }
 }

这是我的错误结果:

[Syntax Error] line 0, col 31: Error: Expected Doctrine\ORM\Query\Lexer::T_SET, got '`'
QueryException: [Syntax Error] line 0, col 31: Error: Expected Doctrine\ORM\Query\Lexer::T_SET, got '`'
QueryException: UPDATE AppBundle:ChangeAPI SET `key`='asd123' WHERE `id` = 1 

有人能帮我吗?谢谢。


难道不应该是 AppBundle.ChangeAPI 而不是 AppBundle:ChangeAPI 吗? - Sougata Bose
don't use the ``` character - Matteo
@SougataBose,这是100%没问题的: - Colar Paul
@Matteo。如果我不使用 without,那么会出现以下错误: [语法错误] 第0行,第31列:错误:期望Doctrine\ORM\Query\Lexer::T_SET,得到'key' - Colar Paul
好的,我不知道那个。谢谢.. :) - Sougata Bose
4个回答

6

【语法错误】第0行,第57列:错误:期望=,<,<=,<>,>,>=,!=,得到'AND' - Colar Paul
修改后的示例。其中以不同的方式接受参数。 - Palethorn
我有超过1个更新查询,但我不明白为什么这个不起作用,而其他的都可以! - Colar Paul
是的,我解决了!问题出在这里: @ORM\Column(type="string", name="key") -- 我将name="key"替换为name="key"。 - Colar Paul
太好了。很高兴我能帮忙。 - Palethorn
显示剩余3条评论

2
尝试使用别名:
$query = $entityManager->createQuery("UPDATE AppBundle:ChangeAPI c SET c.key='asd123' WHERE c.id = 1");
$query->execute();

希望这可以帮助您。

1
这不是MySQL查询,而是DQL查询,因此,请勿在单元格名称中使用"`"字符。
$query = $entityManager->createQuery("UPDATE AppBundle:ChangeAPI SET key='asd123' WHERE id = 1");

[语法错误] 第0行,第31列:错误:期望Doctrine\ORM\Query\Lexer::T_SET,得到'key'。 - Colar Paul

0

我想你可以通过Doctrine创建一个查询来实现这个功能。另一种方法是在你的普通控制器方法中进行更改。

在你的控制器中:

/**
 * @Route("/edit/{id}"), name="app_edit_API")
 * @param ChangeAPI
 */
public function editAPIAction(ChangeAPI $changeAPI)
{
     $changeAPI->setKey('asd123');
     $this->getDoctrine()->getManager()->flush();
}

你是在使用表单还是命令?如果是的话,那么上面Palethorn的回答是更好的选择。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接