简体   繁体   English

基本原则与查询生成器的结合

[英]Basic doctrine join with query builder

I have two entities - BlacklistedUsers and UserAccounts. 我有两个实体-BlacklistedUsers和UserAccounts。 I am trying to build a DQL that allows me to join those two entities together and get BlacklistedUsers#id , UserAccounts#name and BlacklistedUsers#reason . 我正在尝试构建一个DQL,使我可以将这两个实体结合在一起并获得BlacklistedUsers#idUserAccounts#nameBlacklistedUsers#reason

My query builder code is 我的查询生成器代码是

$qb = $this->createQueryBuilder('u')
                    ->join(UserAccounts::class, 'a');   

And regardless of how simple it is the following code still manages to fail 而且无论下面的代码多么简单,它仍然会失败

Fatal error : Uncaught exception 'Doctrine\\ORM\\Query\\QueryException' with message 'SELECT u FROM Orm\\Entity\\BlacklistedUsers u INNER JOIN Orm\\Entity\\UserAccounts a ORDER BY u.reason asc' in *** 致命错误 :***中出现未捕获的异常'Doctrine \\ ORM \\ Query \\ QueryException',消息为'从Orm \\ Entity \\ BlacklistedUsers中选择u u INNER JOIN Orm \\ Entity \\ UserAccounts a ORDER BY u.reason asc'

I double checked the generated query agains docs ( http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html ) and compared it to their example 我仔细检查了生成的查询Agains文档( http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-query-language.html )并将其与他们的示例进行了比较

<?php
$query = $em->createQuery('SELECT a FROM CmsArticle a JOIN a.user u ORDER BY u.name ASC');
$articles = $query->getResult(); // array of CmsArticle objects

I do not see any difference between the query they have and what my query builder generates. 我看不到它们具有的查询与查询生成器生成的内容之间有任何区别。

Below is the class diagram to make things easier 下面是使事情变得更容易的类图

类图

Thanks for your help 谢谢你的帮助

It looks like your class isn't correctly mapped. 看来您的课程未正确映射。 Try to create queryBuilder from class repository: 尝试从类存储库创建queryBuilder:

$repo = $this->getDoctrine()->getRepository('AppBundle:BlacklistedUsers');

$query = $repo->createQueryBuilder('b')
    ->select('b.id, u.name, b.reason')
    ->join('b.userAccount', 'u')
    ->orderBy('b.reason', 'ASC')
    ->getQuery();

$products = $query->getResult();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM