如何在symfony2中从存储库中查找记录

时间:2015-04-23 10:25:49

标签: symfony doctrine-orm

如何从控制器中的存储库中找到记录?它只能通过id搜索,但我想通过电子邮件或任何我想要的东西进行搜索?

$em = $this->getDoctrine()->getRepository('HomeBundle:user')->find($email);

3 个答案:

答案 0 :(得分:2)

为什么不使用findOneBy?

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

答案 1 :(得分:2)

您需要使用findOneBy(array)通过电子邮件找到单个记录

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

答案 2 :(得分:1)

对于简单查询(基本上为WHERE column = value),您可以使用findByfindOneBy

$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('HomeBundle:user')
             ->findOneBy(array("email"=>$email),array());
$entities = $em->getRepository('HomeBundle:user')
               ->findBy(array("email"=>$email), array());

如果您需要更复杂的内容(例如>=或加入),可以使用query builderdql

但是你应该创建一个Custom Repository并将你的查询放在那里以使它们可以重复使用并保持控制器的纤薄。

这涉及以下四个步骤:

  • 在HomeBundle / Entity中使用名称空间创建一个扩展EntityRepository
  • 的UserRepository类
  • 在实体配置中链接您的存储库(注释,yaml或xml)
  • 使用dql或查询构建器编写存储库函数。
  • 调用存储库函数而不是findOneBy