如何将返回更新查询使用 DQL



我正在尝试运行以下简单查询(它在postgresql中工作(

更新ja_clients设置ref_inc_num = ref_inc_num + 1,其中ID = 43933返回ref_inc_num;

进入 DQL

$query = $this->entityManager->createQuery((;            $query->setDQL("UPDATE Geoop\Core\Entity\Account a SET a.jobReferenceNumber__ = a.jobReferenceNumber__ + 1 其中 a.id = :accountId 返回 a.jobReferenceNumber__"(;            $query->setParameter('accountId', $account->getId(((;            $total = $query->getSingleScalarResult((;

但是重新调整此错误不起作用:

#30 /var/www/geoop_api/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php (line 861): DoctrineORMQueryParser->syntaxError(end of string)
#31 /var/www/geoop_api/vendor/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php (line 448): DoctrineORMQueryQueryException::dqlError(UPDATE GeoopCoreEntityAccount a SET a.jobReferenceNumber__ = a.jobReferenceNumber__ + 1  WHERE a.id = :accountId  RETURNING a.id as id)

DQL 不支持 RETURNING 子句,因此需要使用本机 SQL。您还必须创建结果集映射。

注意:我不知道您的表和列的实际名称,但假设它们与您的实体和属性的名称相同,这将起作用:

$rsm = new DoctrineORMQueryResultSetMapping();
$rsm->addScalarResult('jobReferenceNumber', 'jobReferenceNumber');
$sql = "
    UPDATE account a
    SET a.jobReferenceNumber = a.jobReferenceNumber + 1
    WHERE a.id = :accountId
    RETURNING a.jobReferenceNumber
";
$query = $this->entityManager->createNativeQuery($sql, $rsm);
$query->setParameter('accountId', $account->getId());
$total = $query->getSingleScalarResult();

您可能需要更正我示例中的表名和列名。使用本机 SQL 时,必须使用数据库中的实际名称,而不是实体和属性的名称。另外,请记住,postgres 会将所有对象名称转换为大写,除非它们被引号。

感谢您的见解:)这现在正在工作

这是我更新的代码:在类上方,我使用 ResultSetMapping

use DoctrineORMQueryResultSetMapping;
$rsm = new ResultSetMapping();
$rsm->addScalarResult('ref_inc_num', 'ref_inc_num');
$sql = "
UPDATE ja_clients
SET ref_inc_num = ref_inc_num + 1
WHERE id = :clientId
RETURNING ref_inc_num
";
$query = $this->entityManager->createNativeQuery($sql, $rsm);
$query->setParameter('clientId', $account->getId());
$refNum = $query->getSingleScalarResult();

相关内容

  • 没有找到相关文章

最新更新