【发布时间】: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