symfony 1.4推进1.6:总和

时间:2012-09-06 20:38:07

标签: php symfony-1.4 sum propel

我正试图在推进中获得一列。我的代码

$c = new Criteria();
$c->add(valuePeer::OWNER_ID, $this->getId());
$c->addSelectColumn('SUM(' . valuePeer::VALUE . ') as total');
$c->addGroupByColumn(valuePeer::VALUE);

$sum = valuePeer::DoSelect($c);

打印出$sum什么都不返回(甚至不是空对象)。我得到的只是Notice: Undefined offset: 1 in /.../lib/model/om/BaseValue.php on line 203 Notice: Undefined offset: 2 in /.../lib/model/om/BaseValue.php on line 204

我按照建议here和其他多个讨论使用::DoSelectRS($c)尝试了此方法但我收到了错误:Fatal error: Call to undefined method ValuePeer::DoSelectRS() in /.../lib/model/Restauracia.php on line 39

有人可以告诉我这方面的正确方法吗?

3 个答案:

答案 0 :(得分:7)

为什么不使用新的ModelCriteria而不是旧的详细的?

$sum = ValueQuery::create()
  ->select(array('total'))
  ->filterByOwnerId($this->getId())
  ->withColumn('SUM(Value.Value)', 'total')
  ->find();

会返回类似的内容:

PropelArrayCollection(
  array('total' => 25)
)

答案 1 :(得分:3)

我刚刚找到了这个解决方案。它像我需要的那样工作。

$c = new Criteria();
$c->clearSelectColumns();
$c->add(valuePeer::OWNER_ID, $this->getId());
$c->addSelectColumn('SUM(' . valuePeer::VALUE . ') as total');
//$c->addGroupByColumn(valuePeer::VALUE);

$sum = valuePeer::DoSelectStmt($c)->fetchAll(PDO::FETCH_COLUMN,0);
$sum = $sum[0];

答案 2 :(得分:2)

试试这个(不要担心findOneSUM无论如何都会返回一行)。

请注意,getTotal()是根据参考'总计&#39}生成的。 ofColumn。

约定是get+Columnname(camelcase)

$sum = ValueQuery::create()
  ->filterByOwnerId($this->getId())
  ->withColumn('SUM(Value.Value)', 'total')
  ->findOne()
  ->getTotal();