2016-10-01 78 views
0

我有以下学说查询builer返回我这个错误:学说查询生成器发生故障

No result was found for query although at least one row was expected. 

我怀疑是错误出现,因为它无法找到的协会之一,因为不是所有的领域都有该关联。 在哪里我相信这个问题:

->join('b.answer', 'c') 

的方法:

public function getOneByStep($step, $surveyId) 
    { 
     $qb = $this->getEntityManager()->createQueryBuilder(); 

     return $qb 
      ->select(['u', 'b', 'c']) 
      ->from(QuestionManager::class, 'u') 
      ->join('u.survey', 'a') 
      ->join('u.suggestQuestionManager', 'b') 
      ->join('b.answer', 'c') 
      ->where('u.step = :step') 
      ->andWhere('a.id = :survey') 
      ->setParameter('step', $step) 
      ->setParameter('survey', $surveyId) 
      ->getQuery() 
      ->getSingleResult() 
      ; 
    } 
+0

leftJoin('b.answer','answer')可能想在默认情况下使用左连接进行几乎任何连接。 – Cerad

+0

你可以发布它作为答案,所以我可以接受它吗? :D –

回答

1

给出的查询不会在数据库中的数据返回任何结果。理想情况下应该使用NoResultException进行处理。

use Doctrine\ORM\NoResultException; 

public function getOneByStep($step, $surveyId) 
{ 
    $qb = $this->getEntityManager()->createQueryBuilder(); 
     ->select(['u', 'b', 'c']) 
     ->from(QuestionManager::class, 'u') 
     ->join('u.survey', 'a') 
     ->join('u.suggestQuestionManager', 'b') 
     ->join('b.answer', 'c') 
     ->where('u.step = :step') 
     ->andWhere('a.id = :survey') 
     ->setParameter('step', $step) 
     ->setParameter('survey', $surveyId); 

    try { 
     return $qb->getQuery()->getSingleScalarResult(); 
    } catch (NoResultException $ex) { 
     return; 
    } 
} 
+0

我的问题是该记录存在于数据库中。问题在于学说无法找到它,因为b.answer并不总是会返回记录。 –

+0

是的,这导致'getSingleResult()'不返回任何导致错误的结果。请参阅https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/AbstractQuery.php#L806和https://github.com/doctrine/doctrine2/blob/c1943624ab1260c629316bab104dc5130c060154/lib/Doctrine/ORM /NoResultException.php#L35 – martin