2013-07-22 4 views
12

J'ai un problème jeter NonUniqueResultException dans ma demandeSymfony2 Doctrine jet NonUniqueResultException

public function getLastViewUpdate($view) 
{ 
    $qb = $this->getEntityManager()->createQueryBuilder(); 

    $result = $qb->select('vu') 
     ->from('EasyApp\ApplicationBundle\Entity\ViewUpdate', 'vu') 
     ->where('vu.view = :view') 
     ->orderBy('vu.date','DESC') 
     ->setParameter('view', $view) 
     ->getQuery() 
     ->getSingleResult(); 

    return $result; 
} 

Mais je ne sais pas pourquoi vraiment, je dois peut-être importer quelque chose, mais je ne peux pas trouver

CRITICAL - Uncaught PHP Exception Doctrine\ORM\NonUniqueResultException: "" at /Users/antoine/Documents/projects/easyApp/application/vendor/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php line 621 

Merci pour votre aide

Répondre

32

Vous pouvez vérifier la déclaration de getSingleResult fonction

/** 
* Gets the single result of the query. 
* 
* Enforces the presence as well as the uniqueness of the result. 
* 
* If the result is not unique, a NonUniqueResultException is thrown. 
* If there is no result, a NoResultException is thrown. 
* 
* @param integer $hydrationMode 
* @return mixed 
* @throws NonUniqueResultException If the query result is not unique. 
* @throws NoResultException If the query returned no result. 
*/ 
public function getSingleResult($hydrationMode = null) 
{ 
    ... 
    if (count($result) > 1) { 
     throw new NonUniqueResultException; 
    } 
    ... 
} 

Pour résoudre le problème, vous pouvez définir LIMIT pour interroger et obtenir un seul résultat avec ->setMaxResults(1).

+0

Merci ça marche, mais cette n'est pas très correct, je ne comprends pas pourquoi lancer une erreur créer une erreur critique – Ajouve

+1

Ce n'est pas une erreur, son exception. vérifier le code 'getSingleResult', j'ai mis à jour ma réponse. –

+0

Ok, mais ma page n'est pas aller chercher et j'ai une erreur 500 dans symfony – Ajouve

1

Cela signifie simplement que vous avez deux ViewUpdates ou plus avec la même vue.

6

N'utilisez pas getSingleResult si vous attendez plus d'un résultat ... L'utilisation de cette fonction effectue une vérification de l'unicité de votre résultat, c'est l'intention de cette fonction.

De nombreux choix:

  • Utilisez getSingleResult et faire face à l'exception (comme un try {...} catch (NonUniuqueResultException $e) {...} ou ajuster la structure de votre base de données pour éviter les doublons,
  • Utilisez getSingleResult et ajoutez setMaxResults(1), mais ce qui est vraiment une étrange façon de faire confiance modèle DB,
  • Utilisez getResult et faire quelque chose avec des résultats retournés.
+1

Merci pour votre réponse – Ajouve

Questions connexes