您可能会想要选择原生查询 http://docs.doctrine-project.org/en/latest/reference/native-sql.html
$sql = "SELECT terrain_id as terrain,
count(*) AS count "
."FROM Partie "
."GROUP BY terrain_id;";
$rsm = new ResultSetMapping;
$rsm->addScalarResult('terrain', 'terrain');
$rsm->addScalarResult('count', 'count');
$query = $this->_em->createNativeQuery($sql, $rsm);
return $query->getResult();
只需根据需要添加任何having/where 子句即可。
以下是我的结果:
Array
(
[0] => Array
(
[terrain] =>
[count] => 7
)
[1] => Array
(
[terrain] => 1
[count] => 5
)
[2] => Array
(
[terrain] => 2
[count] => 1
)
)
缺乏terrain
第一个数组中的值是 nullterrain_id
.
EDIT
OP 出现意外结果,因此以下是一些故障排除步骤:
1)尝试一个var_dump($query->getSQL());
right before the return
语句,并直接针对您的数据库运行 SQL。如果这产生了不正确的结果,请检查查询并更改$sql
作为适当的。
2) 如果#1 产生正确的结果,请尝试var_dump($query->getResult());
right before返回语句。如果这产生了正确的结果,则说明您的代码中发生了更深层的事情。是时候看看为什么了terrain
正在被过滤。它可能就像删除或更改 SQL 中的别名一样简单addScalarResult
.
3)尝试一个更简单的函数:
$sql = "SELECT distinct(terrain_id) FROM Partie;";
$rsm = new ResultSetMapping;
$rsm->addScalarResult('terrain_id', 'terrain_id');
$query = $this->_em->createNativeQuery($sql, $rsm);
var_dump($query->getSQL());
var_dump($query->getResult());
return $query->getResult();