3

我现在已经升级到 Doctrine 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;
4

1 回答 1

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

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

一些文档:

于 2012-09-07T14:35:59.130 回答