我正在尝试使用Doctrine从原生查询中返回一行。下面是我的代码:
$rsm = new ResultSetMapping;
$rsm->addEntityResult('VNNCoreBundle:Player', 'p');
$rsm->addFieldResult('p', 'player_id', 'id');
$sql = "
SELECT player_id
FROM players p
WHERE CONCAT(p.first_name, ' ', p.last_name) = ?
";
$query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
$query->setParameter(1, $name);
$players = $query->getResult();最后一行返回一个球员列表,但我只想要一个结果。我该怎么做?
发布于 2012-07-06 07:42:59
您可以使用$query->getSingleResult(),如果找到多个结果或没有找到任何结果,它将抛出异常。(请参阅此处的相关phpdoc https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/AbstractQuery.php#L791)
还有一个不太出名的$query->getOneOrNullResult(),如果找到多个结果,它将抛出异常,如果没有找到结果,则返回null。(请参阅此处的相关phpdoc https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/AbstractQuery.php#L752)
发布于 2015-08-24 01:32:20
如果有多个结果,getSingleResult()和getOneOrNullResult()都会抛出异常。要解决此问题,可以将setMaxResults(1)添加到查询构建器中。
$firstSubscriber = $entity->createQueryBuilder()->select('sub')
->from("\Application\Entity\Subscriber", 'sub')
->where('sub.subscribe=:isSubscribe')
->setParameter('isSubscribe', 1)
->setMaxResults(1)
->getQuery()
->getOneOrNullResult();发布于 2016-06-04 14:18:40
->getSingleScalarResult()将返回单个值,而不是数组。
https://stackoverflow.com/questions/11348604
复制相似问题