【问题标题】:ZF2 ResultSet and count performanceZF2 ResultSet 和计数性能
【发布时间】:2013-04-03 11:03:03
【问题描述】:

我将 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(*)' 相比,在性能方面不确定。

【问题讨论】:

  • 您是否自定义 RowGateway 扩展 Zend\Db\RowGateway\AbstractRowGateway?
  • 是的,但是如果我使用默认的 RowGateway,问题也会存在。我现在找到了另一种解决方法:我为同一个表创建了两个 TableGateway,一个用于选择和计数,一个用于写入,后一个使用我的 AuditingRowGateway 记录所有更改。
  • 您使用的是 RowGateway 还是 TableGateway?您的示例令人困惑......看起来像 TableGateway NOT Row..
  • 在问题中添加了 TableGateway 创建行。

标签: php database zend-framework2


【解决方案1】:

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

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

【讨论】:

  • 它对我不起作用,但给出了一个想法。 $primkey => new\Zend\Db\Sql\Expression('COUNT(*)') 工作,不管它有多丑。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2010-11-13
    • 2014-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多