Symfony 条令-如何获取按相关实体计数排序的实体(一对多)?

Symfony 条令-如何获取按相关实体计数排序的实体(一对多)?,symfony,doctrine-orm,dql,Symfony,Doctrine Orm,Dql,我试图检索按评论数量排序的最活跃的用户 此DQL查询返回一个对象 $query = $this->_em->createQuery( 'select u, COUNT(q) qc FROM Btp\UserBundle\Entity\User u JOIN u.questions q ORDER BY qc' ) ->setMaxResults($limit)

我试图检索按评论数量排序的最活跃的用户

此DQL查询返回一个对象

    $query = $this->_em->createQuery(
        'select u, COUNT(q) qc
         FROM Btp\UserBundle\Entity\User u 
         JOIN u.questions q 
         ORDER BY qc'
        )
        ->setMaxResults($limit)
        ->getResult();

... while this query returns two objects as expected.

    $query = $this->_em->createQuery(
        'select u
         FROM Btp\UserBundle\Entity\User u 
         JOIN u.questions q'
        )
        ->setMaxResults($limit)
        ->getResult();
我如何解决这个问题

编辑2:

好的,我想我不远了。为此:

$rsm = new ResultSetMapping;
$rsm->addEntityResult('Btp\UserBundle\Entity\User', 'u');
$rsm->addFieldResult('u', 'id', 'id');
$rsm->addFieldResult('u', 'name', 'name');
$rsm->addJoinedEntityResult('Btp\UserBundle\Entity\Question' , 'q', 'u', 'questions');
$rsm->addFieldResult('q', 'question_id', 'id');
$rsm->addScalarResult('nb_questions', 'nbQuestions');

$sql = 'SELECT u.id, u.name, COUNT(q.id) as nb_questions
        FROM user AS u
        INNER JOIN question AS q ON u.id = q.auteur_id 
        GROUP BY u.id
        ORDER BY nb_questions ASC';
$query = $this->_em->createNativeQuery($sql, $rsm);
return ($query->getResult());
我检索了两个用户对象,但我不明白如何为每个用户访问COUNT()结果

编辑:

我查看了NativeQuery,这似乎是可能的,但我不明白为什么它不起作用:

   $rsm = new ResultSetMapping;
            $rsm->addEntityResult('User', 'u');
            $rsm->addFieldResult('u', 'id', 'id');
            $rsm->addFieldResult('u', 'name', 'name');
            $rsm->addJoinedEntityResult('Question' , 'q', 'u', 'questions');
            $rsm->addFieldResult('q', 'question_id', 'id');
            $rsm->addScalarResult('nb_questions', 'nbQuestions');

            $sql = 'SELECT u.id, u.name, COUNT(q.id) as nb_questions
                    FROM user AS u
                    INNER JOIN question AS q ON u.id = q.auteur_id 
                    GROUP BY u.id
                    ORDER BY nb_questions ASC';
            $query = $this->_em->createNativeQuery($sql, $rsm);
这只返回一个对象

但我希望每个用户都有一个对象,可能的话,每个用户都有一个“抽象属性”(我只是发明了这个世界,而不是用谷歌搜索它…),并回答他们的问题

我不知道我是否真的很清楚


谢谢

再次阅读Dotrine文档后,我找到了一个解决方案。就像我的第二次编辑一样,您只需要创建一个ScalarField。我给你举个例子

$rsm = new ResultSetMapping;
$rsm->addEntityResult('Btp\UserBundle\Entity\User', 'u');
$rsm->addFieldResult('u', 'id', 'id');
$rsm->addFieldResult('u', 'name', 'name');
$rsm->addJoinedEntityResult('Btp\UserBundle\Entity\Question' , 'q', 'u', 'questions');
$rsm->addFieldResult('q', 'question_id', 'id');
$rsm->addScalarResult('nb_questions', 'nbQuestions');

$sql = 'SELECT u.id, u.name, COUNT(q.id) as nb_questions
        FROM user AS u
        INNER JOIN question AS q ON u.id = q.auteur_id 
        GROUP BY u.id
        ORDER BY nb_questions ASC';
$query = $this->_em->createNativeQuery($sql, $rsm);
return ($query->getResult());
在本例中,条令返回一个用户数组,您可以通过以下方式访问它们:

(我们假设$askers具有下面代码的返回结果)

如果需要ScalarField,请在返回数组中设置一个新字段,以便:

$askers[0][“nbQuestions”]//给出ScalarField的结果,在本例中是数组的第一个用户的
问题编号


谢谢,希望能对你有所帮助

您的第一个查询按u进行隐式
分组,因此我希望第二个查询的两个结果
u
是相同的。因此。。。在一个DQL请求中做我想做的是不可能的?我想你需要将它更改为
选择u,计数(不同的(q))qc
好的,泰,我明天在工作中测试它,我告诉你它是否有效:)呼。。。我很失望。。。这给出了一个错误:[语法错误]第0行,第25列:错误:预期的条令\ORM\Query\Lexer::T\u CLOSE\u括号,得到了“q”。还有别的想法吗?
$askers->[0][0]->getName() //return the name of the first User in array