我正在尝试使用Doctrine2在DQL中执行更新查询到mysql数据库。这是我的代码:
$updateFiles = $entityManager
->createQuery("UPDATE Attachment a "
. "SET a.filename=CONCAT(:dst, TRIM(LEADING :src FROM a.filename)) "
. "WHERE a.owner=:ownerId AND a.filename LIKE :srcLike");
$updateFiles->setParameter("dst", $dstFile);
$updateFiles->setParameter("src", $srcFile);
$updateFiles->setParameter("ownerId", $this->owner->getId());
$updateFiles->setParameter("srcLike", $srcFile.'/%');
$updateFiles->execute();
执行此代码时,出现以下语法错误:
[Syntax Error] line 0, col 77: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got ':src'
我尝试在没有TRIM和CONCAT的情况下执行查询,它可以正常工作。如果我用' somerandomtext'替换:src没有错误。 TRIM的语法是correct!出于某种原因,参数:src不会被替换。
这是一个错误还是我错过了什么?
答案 0 :(得分:0)
我在代码中查看了DQL中TRIM函数的实现,似乎我不能使用参数来表示字符' trchar'。
TRIM([LEADING | TRAILING | BOTH] [‘trchar’ FROM] str)
所以我将用查询连接字符串:
$updateFiles = $entityManager
->createQuery("UPDATE Attachment a "
. "SET a.filename=CONCAT(:dst, TRIM(LEADING $srcFile FROM a.filename)) "
. "WHERE a.owner=:ownerId AND a.filename LIKE :srcLike");