使用findBy'Field'方法的正确方法是什么?

时间:2016-12-14 20:46:59

标签: forms symfony findby

我正在尝试将从表单输入的电子邮件地址与数据库中已有的电子邮件地址进行比较,我认为最好的方法是使用findByEmail方法。

我希望找到表中特定条目的电子邮件地址,而是返回整个条目(名字,姓氏等)。 我如何才能找到表格中条目的电子邮件地址?

我知道我可以使用foreach来遍历条目,但我认为这有点违背了使用findByEmail函数的目的。

这是我到目前为止所尝试的内容:

$formEmail = $form->get('email')->getData();
$personEmail = $em->getRepository('UserBundle:User')->findByEmail($formEmail); //Should just find the email address of a person in the database. 
var_dump($personsEmail); //returns the whole row associated with the email address (first name, last name…..) 
var_dump(if($formEmail == $personEmail));die; //returns false when it should be true because it finds the whole row instead of the email address

1 个答案:

答案 0 :(得分:0)

如果您通过电子邮件成功获取了实体,则电子邮件必须匹配。

    $formEmail = $form->get('email')->getData();

    $person = $em->getRepository('UserBundle:User')->findOneByEmail($formEmail); 

    if ($person instanceof User) {

        // you found a user by email, so the email therefore must match ...        
    }

注意,使用findOneBy而不是findBy,那么你将直接获取对象,而不是在集合中。

或者,如果必须只提取电子邮件地址进行比较。

    $email = $em->createQueryBuilder()
        ->select('u.email')
        ->from('UserBundle:User', 'u')
        ->where('u.email = :email')
        ->setParameter('email', $formEmail)
        ->getQuery()
        ->getSingleScalarResult()
    ;

请注意,您可以在我的第一个示例中使用$ person-> getEmail()获得相同的结果。