Doctrine_RawSql查询中的聚合值

时间:2010-02-18 09:03:34

标签: php doctrine doctrine-1.2

是否可以在Doctrine_RawSql查询中使用聚合值?这就是我想要做的事情:

$q = new Doctrine_RawSql();
$q->select('{q.*}, AVG(a.value) AS avg');
$q->from('-- complex from clause');
$q->addComponent('q', 'Question');

但是,Doctrine创建的SQL只保留表question中的列,并省略了聚合值avg

3 个答案:

答案 0 :(得分:6)

我之前从未使用过Doctrine_RawSql,但我使用以下两种方法之一通过Doctrine进行了原始SQL查询:

Doctrine_Manager::getInstance()->getCurrentConnection()->fetchAssoc("YOUR SQL QUERY HERE");

$doctrine = Doctrine_Manager::getInstance()->getCurrentConnection()->getDbh();
$result = $doctrine->query('YOUR SQL QUERY HERE');

看起来这两种方法会使原始SQL保持原样。

我应该注意到我在Symfony 1.4应用程序的上下文中使用了Doctrine 1.2,但是AFAIK,无论你使用什么其他框架,这都适合你。

答案 1 :(得分:0)

你看过doctrine cookbook section on aggregates了吗?他们在实体管理器上使用createQuery方法而不是RawSql个对象。

我不是学说的专家,但这可能是一个好的开始!

答案 2 :(得分:0)

尝试将聚合字段放在SQL中,然后使用大括号获取它。 我正在使用SQL子查询。

$q = new Doctrine_RawSql();
$q->select('{s.*}, {s.avg} AS avg');
$q->from('(SELECT q.*, AVG(value) AS avg FROM Question AS q) AS s');
$q->addComponent('s', 'Question');

它对我有用。