使用groupBy进行Doctrine2查询行为

时间:2015-06-18 08:14:12

标签: mysql doctrine-orm doctrine doctrine-query

我在repo中有以下自定义方法:

$query = $qb->select('Client', 'Organization')
                ->from(':Client', 'Client')
                ->leftJoin('Client.organizations', 'Organization');
--different searh conditions--

然后我使用paginator来获得结果:

$paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query->getQuery());
$clients = $paginator->getQuery()
                     ->setMaxResults($length)
                     ->setFirstResult($start);

魔术来了。 我将长度设置为10,第一个结果为0.所以基本上我应该在页面上得到10个结果。但是,如果有5个客户组织(客户mtm组织),那么将有5个结果,如果有7个组织 - 3个结果。

但是如果我添加

$query->groupBy('Client');

然后所有结果都是“正常”:即页面上有10个客户端,并非所有组织(最多1个)。

有没有人遇到同样的问题?有什么想法,建议吗?

1 个答案:

答案 0 :(得分:0)

它可能会多次计算相同的项目。

尝试一次为查询添加distinct子句。

$query = $qb->select('Client', 'Organization')
            ->from(':Client', 'Client')
            ->leftJoin('Client.organizations', 'Organization');
            ->distinct();