2012-05-19 120 views
3

我正在開發一個使用Symfony2和Doctrine2的應用程序。我也使用Doctrine的QueryBuilder。我有這個查詢:學說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; 
    }  

我想怎麼樣的結果,我會在$ Emaitza會看起來。它會是這樣的:

$ Emaitza [0] ['Gordailua'] =所選的第一個Gordailua值。

然後$ Emaitza [0] [?????] =第一個c類型的對象。

我有點困惑。謝謝。

回答

-1

首先你需要指定FROM子句:

$qb->from('YourBundle\Entity\ParentOfGordailua as pg'); 

可以使用:getArrayResult()的數據作爲數組提取,如果你想從對象的ArrayCollection獲得第一個對象(當您正在使用的getResult(),你必須:

$Gordailua = $Emaitza->first()->getGordailua(); 

看看參考和exaples:http://docs.doctrine-project.org/projects/doctrine-orm/en/2.0.x/reference/dql-doctrine-query-language.html

+3

我不認爲這是正確的解決方案: $ Emaitza = $ qb-> getQuery() - > getResult(); 這是一個數組,你不能在數組上調用 - > first()。 –

+1

此外,如果你從一個EntityRepository中調用'$ this-> createQueryBuilder',那麼'FROM'將被處理 –

9

不記得我是怎麼來到這個職位,但我甚至閱讀和思考,以及..反正..

我覺得他的要求得到的第一個結果,如果是這樣..查詢應先知道結果的最大尺寸是做

$qb->setMaxResults(1) 

什麼然後,你可以調用真正的定義本身

$single_result = $qb->getSingleResult() 

所以在給出的示例方法的代碼將看起來像

$qb->getQuery()->setMaxResults(1)->getSingleResult(); 
+0

問題在於,如果你的查詢什麼都不返回,這個查詢會拋出一個錯誤。例如,如果您查詢「id = 1」,如果id = 1不存在,您將收到錯誤「找不到查詢結果,儘管至少有一行是預期的。」 – vinigarcia87