2012-02-18 89 views
4

我正在創建一個註冊表單並希望檢查電子郵件是否尚未與帳戶關聯。我能看到的所有方法都會創建整個用戶實體,但我只需要知道它是否存在。判斷實體是否存在於Doctrine 2中的最有效方法

+0

我還沒有遷移到Symfony 2,但是在Symfony 1中,您可以在窗體的驗證器模式中添加一個'sfValidatorDoctrineUnique'。 Symfony 2中不存在類似的概念嗎? – 2012-02-18 18:48:53

+1

我沒有在Symfony裏面使用Doctrine。 – 2012-02-20 17:41:13

+4

好點。這會教會我忽略這樣一個事實,即一個問題沒有用框架標記(: – 2012-02-20 19:09:07

回答

8
public function isUnusedEmail($email) { 
    $em = static::$pimple['em']; 
    $dql = 'SELECT 1 FROM App\Model\User user WHERE user.email = :email'; 
    $query = $em->createQuery($dql); 
    $query->setParameter('email', $email); 

    $res = $query->getResult(); 
    return empty($res); 
    } 
2

考慮以下方法:

/** 
* @param string $token 
* @return bool 
*/ 
public function isTokenUnique($token) 
{ 
    $manager = $this->getEntityManager(); 

    /** @var Doctrine\ORM\Query $query */ 
    $query = $manager-> 
     createQuery('SELECT 1 FROM AppBundle:Member m WHERE m.token = :token') 
      ->setParameter('token', $token) 
      ->setMaxResults(1) 
    ; 

    return (count($query->getResult()) == 0); 
} 

通知書setMaxResults()通話。在某些情況下,這可能很重要。

相關問題