如何正确编写Doctrine 2 DQL查询?

时间:2012-09-07 14:14:27

标签: php doctrine-orm dql

我现在升级到了Doctrine 2.2.2。我成功地将我的数据库连接到我的应用程序,并能够生成代理和存储库。我对那一代人没有任何问题。我只是对使用DQL of doctrine 2.2.2感到困惑。 案例是这样的:我目前有一个存储库类负责用户注册,身份验证等。我已经设法在其上执行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;

1 个答案:

答案 0 :(得分:3)

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

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();

意思是,存储库已经在您的实体上输入,并且知道要从哪个类中进行选择。

一些文档: