ZF2 ResultSet和计数性能

时间:2013-04-03 11:03:03

标签: php database zend-framework2

我正在使用TableGateway和附加的自定义RowGateway对象。如果我想使用TableGateway-> getSql() - > select()返回的对象来获取记录计数,则附加的RowGateway对象会抱怨结果集中缺少主键。

   $tablegateway = new TableGateway('table', $adapter, new RowGatewayFeature(new AuditingRowGateway($primkey, 'table', $adapter), new ResultSet());
   $select = $tablegateway->getSql()->select();
   $select->columns(array('num' => new \Zend\Db\Sql\Expression('COUNT(*)')));
   $row = $tablegateway->selectWith($select)->current();

结果:Zend \ Db \ RowGateway \ Exception \ RuntimeException:处理主键数据时,在数据数组中找不到已知键xxx

我可以通过发出正常(即非计数)选择来解决它:

$result = $tablegateway->selectWith($select);
$count = $result->count();

但与“SELECT COUNT(*)”相比,不确定这种性能。

2 个答案:

答案 0 :(得分:3)

即使你只想要一个计数值,如果在columns数组中包含主键,它应该可以工作。

$select->columns(array($primkey, 'num' => new \Zend\Db\Sql\Expression('COUNT(*)')));

答案 1 :(得分:0)

对我有用的是:
$select->columns(array( 'id'=>'id', 'nr'=>new \Zend\Db\Sql\Expression('COUNT(*)')));