好的,
$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();
它返回一个数组或一个对象?这是处理它的正确方法吗?
答案 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),您将收到异常。