2013-07-22 12 views
12

Ho un problema gettando NonUniqueResultException nella mia richiestaSymfony2 Dottrina tiro 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; 
} 

Ma non so davvero perché, devo forse importare qualcosa, ma non riesco a trovare

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

Grazie per il vostro aiuto

risposta

32

È possibile controllare la dichiarazione di getSingleResult funzione

/** 
* 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; 
    } 
    ... 
} 

Per risolvere il problema È possibile impostare LIMIT per interrogare e ottenere un solo risultato con ->setMaxResults(1).

+0

Grazie funziona, ma questo non è molto corretto, non capisco perché lanciare un errore crea un errore critico – Ajouve

+1

Non è un errore, è un'eccezione. controlla il codice 'getSingleResult', ho aggiornato la mia risposta. –

+0

Ok, ma la mia pagina non viene recuperata e ho un errore 500 in symfony – Ajouve

1

Significa solo che avete due o più ViewUpdate con la stessa vista.

6

Non utilizzare getSingleResult se si prevedono più di 1 risultato ... Utilizzando questa funzione si esegue un controllo di unicità del risultato, è l'intenzione di questa funzione.

Molte scelte:

  • Utilizzare getSingleResult e trattare con l'eccezione (come un try {...} catch (NonUniuqueResultException $e) {...} o regolare la vostra struttura DB per evitare duplicati,
  • Utilizzare getSingleResult e aggiungere setMaxResults(1), ma questo è davvero uno strano modo di fiducia il vostro modello DB,
  • Usa getResult e fare qualcosa con risultati restituiti.
+1

Grazie per la risposta – Ajouve

Problemi correlati