2012-08-09 23 views
7

Quiero obtener el último perfil de usuario. Pero no puedo hacer eso en DQL. tengo este código¿Cómo puedo obtener el único resultado usando DQL en 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; 

Devuelve todos los perfiles.

si uso getSingleResult(), entonces se dice que el resultado no es único

+1

¿Intentó cambiando 'setMaxResult (1)'? –

+0

probé el resultado (1) pero también retured array no objeto único – user17

+0

setMaxResults (1) funciona bien ... –

Respuesta

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

¿Qué pasó si $ allProfiles está vacío? – sdespont

41

El método correcto es:

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

Para evitar error, entonces no hay resultados Prueba esto:

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

Esta debería ser la respuesta aceptada. –

Cuestiones relacionadas