首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Doctrine NativeQuery获取单行结果

使用Doctrine NativeQuery获取单行结果
EN

Stack Overflow用户
提问于 2012-07-06 00:26:30
回答 6查看 130.8K关注 0票数 58

我正在尝试使用Doctrine从原生查询中返回一行。下面是我的代码:

代码语言:javascript
复制
$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();

最后一行返回一个球员列表,但我只想要一个结果。我该怎么做?

EN

回答 6

Stack Overflow用户

发布于 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)

票数 105
EN

Stack Overflow用户

发布于 2015-08-24 01:32:20

如果有多个结果,getSingleResult()getOneOrNullResult()都会抛出异常。要解决此问题,可以将setMaxResults(1)添加到查询构建器中。

代码语言:javascript
复制
 $firstSubscriber = $entity->createQueryBuilder()->select('sub')
        ->from("\Application\Entity\Subscriber", 'sub')
        ->where('sub.subscribe=:isSubscribe')
        ->setParameter('isSubscribe', 1)  
        ->setMaxResults(1)
        ->getQuery()
        ->getOneOrNullResult();
票数 83
EN

Stack Overflow用户

发布于 2016-06-04 14:18:40

->getSingleScalarResult()将返回单个值,而不是数组。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11348604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档