2

我对 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: 我无法将子查询重写为子查询。所以...... dql 不做子查询,没有其他方法可以用 dql 做我想做的事?!然后 dql 将缺少我要说的一个非常重要的功能。或者我只是没有看到某事。这里 ?

编辑 4: 我终于得到了子查询,但它慢了大约 10 倍(4 秒而不是 0.4 秒),现在#doctrine 的一些教义人员告诉我,我应该使用 nativeQuery 函数。

编辑 5: 它现在使用 nativeQuery 工作,请参阅我的答案......

4

1 回答 1

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);
于 2011-11-08T13:15:52.793 回答