我对FLOW3很新,而且我对Doctrine很新。
我只是在进行一些测试,我想学习或理解一些我将在以后使用的技术。现在我坚持这个学说部分,我想生成一些统计数据。
$results = $this->entityManager
->createQuery('SELECT version,count(version)
FROM (SELECT device, version
FROM \MyStuff\Stats\Domain\Model\Stat
WHERE
date > \'2011-10-01 00:00:00\' and
date < \'2011-10-02 00:00:00\'
GROUP BY device) GROUP BY version')
->getResult();
我也在其他地方问过,他们把我引导到Doctrine Docs。
那么,现在有几个例子,但是这两个衬里是微不足道的,我找不到任何与这种子选择相关的例子。
所以我希望有人可以帮助我。
编辑:
我想用dql来解决这个问题
我尝试使用querybuilder解决这个问题,但我被告知querybuilder!= dql
编辑2:
现在我被告知doctrine2不支持“FROM(SUBSELECT)”中的子选择,但是它确实“...... WHERE IN(SUBSELECT)”并且可以将我的查询重写为IN()形式。好吧,现在试着解决这个问题。
编辑3: 我没有将from-subquery重写为子查询。所以... dql不做子查询,没有其他方法可以用dql做我想要的东西?!然后dql将缺乏一个非常重要的功能,我会说。或者我只是没有看到某事。在这?
编辑4: 我终于得到了子查询,但它慢了大约10倍(4秒而不是0.4)现在我被#doctrine的一些教义人告诉我,我应该使用nativeQuery函数。
编辑5: 它现在使用nativeQuery,请参阅我的答案......
答案 0 :(得分:0)
使用原生查询就像那样......
$rsm = new \Doctrine\ORM\Query\ResultSetMapping();
$rsm->addScalarResult('version', 'version');
$rsm->addScalarResult('count', 'count');
$results = $this->entityManager
->createNativeQuery(
'SELECT version, COUNT(version) as count FROM
(
SELECT device, version
FROM mystuff_stats_domain_model_stat
WHERE
date > \'2011-10-01 00:00:00\' and
date < \'2011-10-02 00:00:00\'
GROUP BY device
)
as devices GROUP BY version',$rsm)
->execute();
echo var_dump($results,true);