symfony doctrine通过电子邮件找到用户

时间:2014-08-05 15:09:38

标签: symfony doctrine-orm

好的,

$user = $this->getDoctrine()
->getRepository('UserBundle:User')
->find($user_id)

我通过给定的标识符(ID)获得用户。

但我如何通过电子邮件告诉他?

  $emailCheck = $em->createQueryBuilder('u')
        ->select('u, r')
        ->where('u.email = :email')
        ->setParameter('email','test@email.com')
        ->getQuery();

它返回一个数组或一个对象?这是处理它的正确方法吗?

3 个答案:

答案 0 :(得分:2)

这将返回User个对象。

$user = $this->getDoctrine()
    ->getRepository('UserBundle:User')
    ->findOneByEmail($email);

答案 1 :(得分:2)

要么使用Doctrine的魔术方法findOneBy your_field ,要么您可以在回购中创建自己的方法

public function findOneByEmailAndStoreId($email, $store_id)
{
    $q = $this->createQueryBuilder('c')
        ->where('c.email = :email')
        ->andWhere('c.store_id = :store_id')
        ->setParameter('email', $email)
        ->setParameter('store_id', $store_id)
        ->getQuery();
    return $q->getOneOrNullResult(); // will return only one result or null 'getResult' will return a collection
}

答案 2 :(得分:1)

您可以使用

$user = $this->getDoctrine()
->getRepository('UserBundle:User')
->findBy(array('email' => $email));

加载用户实体数组。 (永远是一个列表,即使有0或1个结果。)

或者你可以这样做:

$user = $this->getDoctrine()
->getRepository('UserBundle:User')
->findOneBy(array('email' => $email));

这将返回第一个找到的结果作为用户实体对象。

你可以使用getOneOrNullResult(),这是长变种。但请注意,您应始终使用setMaxResults(1),否则如果找到多个结果(SF 2.3.x),您将收到异常。