2012-08-09 2 views
7

Voglio ottenere l'ultimo profilo utente. Ma non sono in grado di farlo in DQL. Ho questo codiceCome posso ottenere il singolo risultato usando DQL in symfony2

$em = $this->getEntityManager(); 


        $dql = "SELECT p FROM AcmeBundle:UserProfile p 
          WHERE p.user_id = :user_id 
          ORDER BY p.createdAt DESC "; 
        $allProfiles = $em->createQuery($dql) 
            ->setParameter('user_id',$user_id) 
            ->setMaxResults(5) 
            ->getResult(); 
        return $allProfiles; 

Esso restituisce tutti i profili.

Se uso getSingleResult() poi si dice il risultato non unico

+1

hai provato cambiando 'setMaxResult (1)'? –

+0

ho provato anche il risultato (1), ma anche l'array retured non singolo – user17

+0

setMaxResults (1) funziona bene ... –

risposta

4
   $allProfiles = $em->createQuery($dql) 
           ->setParameter('user_id',$user_id) 
           ->setMaxResults(1) 
           ->getResult(); 
       return $allProfiles[0]; 
+8

Che cosa succede se $ allProfiles è vuoto? – sdespont

41

Il metodo giusto è:

$singleProfile = $em->createQuery($dql) 
        ->setParameter('user_id',$user_id) 
        ->getSingleResult(); 

Per evitare errori, allora non ha prodotto risultati provare questo:

$singleProfile = $em->createQuery($dql) 
        ->setParameter('user_id',$user_id) 
        ->getOneOrNullResult(); 
+3

Questa dovrebbe essere la risposta accettata. –