我正在写一个使用Doctrine ORM的Symfony3应用程序。
因此,我要做的是找出表中是否存在给定的电子邮件地址(每个电子邮件都是唯一的)。因此,我有一个具有一些属性的用户存储库,我可以很容易地将数据持久化到数据库中,但无法检索数据。
/**
* @param $email
*/
public function findUserByEmail($email)
{
$user = $this->getDoctrine()
->getRepository('TestBundle:TestUser')
->find($email);
if (!$user) {
echo 'Error';die();
}
}我知道传递给函数的var包含一个电子邮件字符串,但我得到的返回值是错误,当我在if语句之前执行var_dump $user时,得到的是null。
我跟着Symfony docs
发布于 2016-07-29 23:44:11
您的User可能有一个单独的主键字段。存储库上的find()方法仅按主键检索。
Repositories use __call to dynamically process findBy* and findOneBy* methods,所以你可以这样叫它:
$repo = $this->getDoctrine()->getRepository('TestBundle:TestUser');
// magic find method
$user = $repo->findOneByEmail($email);
// explicit find method
$user = $repo->findOneBy(['email' => $email]);
// custom QueryBuilder
$user = $repo->createQueryBuilder('user')
->where('user.email = :email')
->setParameter('email', $email)
->getQuery()
->getSingleResult();顺便说一句:如果你正在验证一个提交的表单,有一个约束可以为你做这个检查:UniqueEntity
发布于 2017-02-18 00:14:07
我想问题是因为你忘了给getManager()打电话。
所以代码应该是:
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('TestBundle:TestUser')->findOneBy(['email' => $email]);希望能对你有所帮助!
https://stackoverflow.com/questions/38662651
复制相似问题