判断一个实体是否存在于Doctrine 2中的最有效方法

时间:2012-02-18 12:20:24

标签: php doctrine doctrine-orm

我正在创建一个注册表单,并想检查一封电子邮件是否已与某个帐户相关联。我能看到的所有方式都将创建整个用户实体,但我只需要知道它是否存在。

2 个答案:

答案 0 :(得分:9)

  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);
  }

答案 1 :(得分: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()。在某些情况下这很重要。