我现在已经升级到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 MyProjectRepository;
use DoctrineORMEntityRepository,
MyProjectEntityAdminUsers;
这几乎是正确的方法。如果使用单引号'
,则可以使用单反斜杠而不是双反斜杠
\
。
Doctrine无法找到(或者这样做会非常昂贵)您通过use
语句导入的类。
但是,您可以使用一个类型化的存储库,通过以下方式从实体管理器中检索:
$repo = $em->getRepository('MyDomainModelUser');
$res = $repo->findSomeone();
在findSomeone()
函数中,您可以执行以下操作:
$qb = $this->createQueryBuilder('u');
$dql = $qb->where('u.id = 1')->getDQL();
return $this->_em->createQuery($dql)->getSingleResult();
也就是说,存储库已经在实体上键入,并且知道要从哪个类中选择。
一些文档:
- 用学说质疑
- 查询生成器
- 10步入门指南(包括基本知识,包括存储库)