Symfony 在大多数情况下,当查询中的行数预期为0时,如何计算行数-Doctrine2

Symfony 在大多数情况下,当查询中的行数预期为0时,如何计算行数-Doctrine2,symfony,doctrine-orm,Symfony,Doctrine Orm,我有一个注册表格和电子邮件,这应该是唯一的。我想做的是,如果有人填写了一封电子邮件,而这封邮件是为另一个用户注册的,那么这个人会看到一封由我写的邮件,而不是类似的邮件 SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin@domain.com' for key 'UNIQ_1483A5E9E7927C74' 我在repository类中尝试了以下方法: public function getSa

我有一个注册表格和电子邮件,这应该是唯一的。我想做的是,如果有人填写了一封电子邮件,而这封邮件是为另一个用户注册的,那么这个人会看到一封由我写的邮件,而不是类似的邮件

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'admin@domain.com' for key 'UNIQ_1483A5E9E7927C74'
我在repository类中尝试了以下方法:

public function getSameFriends ($email)
    {
        $q = $this->createQueryBuilder('f');

        $q->select('f')
          ->where('f.email = :email')      
          ->setParameter('email', $email);

        return $q->getQuery()->getSingleScalarResult();
    }
然后在控制器中:

$em = $this->getDoctrine()->getEntityManager();
        $count = $em->getRepository('EMMyFriendsBundle:Friend')
                                    ->getSameFriends($friend->getEmail());
        if($count != 0)
        {
            $this->get('session')->setFlash('notice', 'There already is a friend with this email!');
            return $this->redirect($this->generateUrl('home_display'));
        }
但我有个例外

No result was found for query although at least one row was expected.
500 Internal Server Error - NoResultException
我不需要查询结果,只需要知道结果是1还是0。你知道怎么做吗?

你可以做:

return count($q->getQuery()->getResult());
顺便说一句,你看过“uniquentity”验证约束了吗?它提供了您需要的现成功能:


获取计数的另一种方法:请记住,在您的查询和控制器执行期间,其他用户提交相同电子邮件的可能性很小。因此,您还应该在插入内容周围加上try/catch以防万一。