我现在升级到了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;
答案 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();
意思是,存储库已经在您的实体上输入,并且知道要从哪个类中进行选择。
一些文档: