Doctrine querybuilder结果

Har*_*itz 4 doctrine query-builder symfony doctrine-orm

我正在使用Symfony2和Doctrine2开发一个应用程序.我也使用Doctrine的QueryBuilder.我有这个问题:

public function getInterpDesberdinak($MarkId)
    {
          $qb = $this->createQueryBuilder('c')
              ->select('DISTINCT c.Gordailua, c')
              ->where('c.MarkIdGordailua = :MarkId')
              ->setParameter('MarkId', $MarkId);
          $Emaitza = $qb->getQuery()->getResult();
          return $Emaitza;
    }       
Run Code Online (Sandbox Code Playgroud)

我想看看结果我将如何得到$ Emaitza看起来.会是这样的:

$ Emaitza [0] ['Gordailua'] =选择的第一个Gordailua值.

然后$ Emaitza [0] [?????] =第一个c类型的对象.

我有点困惑.谢谢.

dbf*_*dbf 10

不记得我是怎么来到这篇文章的,但我甚至读过它并想了想,好吧..反正..

我认为他要求获得第一个结果,如果是这样的话......查询首先要知道结果的最大大小是多少

$qb->setMaxResults(1)
Run Code Online (Sandbox Code Playgroud)

然后你可以调用一个真正定义自己的方法

$single_result = $qb->getSingleResult()
Run Code Online (Sandbox Code Playgroud)

所以在给出的示例中代码看起来像

$qb->getQuery()->setMaxResults(1)->getSingleResult();
Run Code Online (Sandbox Code Playgroud)


Max*_*cki -1

首先,您需要指定 From 子句:

$qb->from('YourBundle\Entity\ParentOfGordailua as pg');
Run Code Online (Sandbox Code Playgroud)

您可以使用: getArrayResult() 以数组形式获取数据,如果您想从对象 ArrayCollection 中获取第一个对象(当您使用 getResult() 时,您必须:

$Gordailua = $Emaitza->first()->getGordailua();
Run Code Online (Sandbox Code Playgroud)

查看参考和示例:http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/dql-doctrine-query-language.html

  • 我认为这不是正确的解决方案: $Emaitza = $qb->getQuery()->getResult(); 这是一个数组,您不能在数组上调用 ->first() 。 (3认同)