如何从控制器的存储库中找到记录?它只按 id 搜索,但我想通过电子邮件或任何我想要的东西搜索?
$em = $this->getDoctrine()->getRepository('HomeBundle:user')->find($email);
为什么不使用findOneBy ?
$user = $this->getDoctrine()
->getRepository('HomeBundle:user')
->findBy(array('email' => $email));
您需要
使用findOneBy(array)
通过电子邮件查找单个记录
$em = $this->getDoctrine()->getRepository('HomeBundle:user')
->findOneBy(array('email' = >$email));
对于简单的查询(基本上是WHERE column = value
),可以使用findBy
或findOneBy
。
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('HomeBundle:user')
->findOneBy(array("email"=>$email),array());
$entities = $em->getRepository('HomeBundle:user')
->findBy(array("email"=>$email), array());
如果需要更复杂的(如>=
或联接),可以使用查询生成器或 dql。
但是您应该创建一个自定义存储库并将您的查询放在那里,以使它们可重用并保持您的控制器苗条。
这涉及以下四个步骤:
- 在 HomeBundle/Entity 中创建一个具有命名空间的用户存储库类 扩展
EntityRepository
- 在实体配置中链接存储库(注释、yaml 或 xml)
- 使用 dql 或查询生成器编写存储库函数。
- 调用存储库函数而不是
findOneBy