如何正确编写条令2 DQL查询


How to properly write Doctrine 2 DQL queries?

我现在已经升级到2.2.2条令。我已经成功地将我的数据库连接到我的应用程序,并能够生成代理和存储库。我对那一代人没有意见。我只是对使用2.2.2原则的DQL感到困惑。情况是这样的:我目前有一个存储库类负责用户注册、身份验证等。我已经设法在它上执行了DQL,但我只是觉得(在我的存储库类中)这些东西很奇怪。

$query = $em->createQuery("SELECT u FROM MyProject''Entity''AdminUsers u");

我也试过:

$query = $em->createQuery("SELECT u FROM AdminUsers u");

最后一个不起作用,但第一个很好,但看起来很奇怪。这真的是执行条令2中DQL的正确方式吗?或者我错过了什么重要的东西。

注意:在上面声明的这个存储库类是:

namespace MyProject'Repository;
use Doctrine'ORM'EntityRepository,
    MyProject'Entity'AdminUsers;

这几乎是正确的方法。如果使用单引号',则可以使用单反斜杠'而不是双反斜杠''

Doctrine无法找到(或者这样做会非常昂贵)您通过use语句导入的类。

但是,您可以使用一个类型化的存储库,通过以下方式从实体管理器中检索:

$repo  = $em->getRepository('MyDomain'Model'User');
$res = $repo->findSomeone();

findSomeone()函数中,您可以执行以下操作:

$qb = $this->createQueryBuilder('u');
$dql = $qb->where('u.id = 1')->getDQL();
return $this->_em->createQuery($dql)->getSingleResult();

也就是说,存储库已经在实体上键入,并且知道要从哪个类中选择。

一些文档:

  • 用学说质疑
  • 查询生成器
  • 10步入门指南(包括基本知识,包括存储库)