1

我有一个原则查询来返回属于特定商店的所有客户。总共返回 29 条记录。但是,如果我使用几乎相同的 DQL 运行计数查询,我会得到不同数量的结果

Query1 - 获取结果:

SELECT c FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3)

返回(使用 count() 计算返回的记录数)

int(29) 


Query2 - 计数结果:

SELECT count(c) FROM Customer c INNER JOIN c.shops cs WHERE cs.shop IN(2, 3)

返回:

array(1) { [0]=> array(1) { [1]=> string(2) "36" } }


我似乎无法弄清楚这是怎么发生的?希望有人可以帮助...

4

2 回答 2

1

我认为你必须“GROUP BY(c)”

于 2012-07-05T18:07:25.713 回答
1

您必须考虑这样一种情况,如果您有同一个客户与两家商店有关联,那么在原始 SQL 土地上您将获得 2 行。

Doctrine 在返回记录 ie 的水合步骤中考虑了这一点$qb->getQuery()->getResults(),并返回一个有意义的结果集(而不是一个你必须手动处理的具有重复项的结果集)。

您可以通过回显 Doctrine 从查询中生成的 SQL$qb->getSQL()并通过 Phpmyadmin、MySQL Workbench 或 Sequel Pro 之类的工具执行它,并将其与从getResults()

于 2012-07-05T20:50:23.120 回答