4

我试图在推进中获得列的总和。我的代码

$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

我按照这里::DoSelectRS($c)的建议和其他多个讨论尝试了这种方法,但我得到了一个错误:。Fatal error: Call to undefined method ValuePeer::DoSelectRS() in /.../lib/model/Restauracia.php on line 39

谁能告诉我这方面的正确方法是什么?

4

3 回答 3

8

为什么不使用新的 ModelCriteria 而不是旧的冗长的呢?

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

将返回如下内容:

PropelArrayCollection(
  array('total' => 25)
)
于 2012-09-07T07:51:21.420 回答
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];
于 2012-09-06T21:00:45.703 回答
2

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

请注意,这getTotal()是从 withColumn 的参考“总计”生成的。

惯例是get+Columnname(驼峰式)

$sum = ValueQuery::create()
  ->filterByOwnerId($this->getId())
  ->withColumn('SUM(Value.Value)', 'total')
  ->findOne()
  ->getTotal();
于 2014-07-30T14:39:58.563 回答