2012-08-09 25 views
7

我想獲取最後一個用戶配置文件。但我無法在DQL中做到這一點。 我有這樣的代碼如何在symfony2中使用DQL獲得單一結果

$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; 

它返回所有配置文件。

如果我使用getSingleResult(),然後它說,導致不唯一

+1

你嘗試了通過改變'setMaxResult(1)'? – 2012-08-09 06:47:10

+0

我嘗試了結果(1),但也反映了陣列不是單個對象 – user17 2012-08-09 07:27:12

+0

setMaxResults(1)正常工作... – 2012-08-09 07:34:08

回答

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

如果$ allProfiles爲void,會發生什麼情況? – sdespont 2015-05-04 14:34:45

41

正確的方法是:

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

爲了避免錯誤,那麼沒有結果試試這個:

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

這應該是被接受的答案。 – 2017-03-27 09:34:34

相關問題