首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony3原理orm查找方法

Symfony3原理orm查找方法
EN

Stack Overflow用户
提问于 2016-07-29 23:38:56
回答 2查看 1.1K关注 0票数 1

我正在写一个使用Doctrine ORM的Symfony3应用程序。

因此,我要做的是找出表中是否存在给定的电子邮件地址(每个电子邮件都是唯一的)。因此,我有一个具有一些属性的用户存储库,我可以很容易地将数据持久化到数据库中,但无法检索数据。

代码语言:javascript
复制
/**
 * @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

EN

回答 2

Stack Overflow用户

发布于 2016-07-29 23:44:11

您的User可能有一个单独的主键字段。存储库上的find()方法仅按主键检索。

Repositories use __call to dynamically process findBy* and findOneBy* methods,所以你可以这样叫它:

代码语言:javascript
复制
$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

票数 2
EN

Stack Overflow用户

发布于 2017-02-18 00:14:07

我想问题是因为你忘了给getManager()打电话。

所以代码应该是:

代码语言:javascript
复制
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository('TestBundle:TestUser')->findOneBy(['email' => $email]);

希望能对你有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38662651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档