Orm 使用ZF2数据库查询获取简单计数值的正确方法是什么?

Orm 使用ZF2数据库查询获取简单计数值的正确方法是什么?,orm,zend-framework2,zend-db,Orm,Zend Framework2,Zend Db,我想要的只是符合条件的记录数(我还需要从表中获取更多信息的其他地方,模型/网关有方法来实现这一点,但我想要的只是数量) 使用Zend Framework 2,我只看到了两个选项,但我觉得这两个选项都不是一个令人满意的解决方案: 一个-做一个简单的选择-我们每天有多达50000或更多的记录 $select = $this->tableGateway->getSql()->select(); $select->columns(array( "hits" =>

我想要的只是符合条件的记录数(我还需要从表中获取更多信息的其他地方,模型/网关有方法来实现这一点,但我想要的只是数量)

使用Zend Framework 2,我只看到了两个选项,但我觉得这两个选项都不是一个令人满意的解决方案:

一个-做一个简单的选择-我们每天有多达50000或更多的记录

$select = $this->tableGateway->getSql()->select();

$select->columns(array(
    "hits" => "id",
));

$select->where->between("timestamp", $start, $end);

$results = $this->tableGateway->selectWith($select);

return $results->count();
两个-执行SELECT COUNT()-然后必须迭代一次结果集并通过模型访问

$select = $this->tableGateway->getSql()->select();

$select->columns(array(
    "hits" => new Expression("COUNT(timestamp)"),
));

$select->where->between("timestamp", $start, $end);

$results = $this->tableGateway->selectWith($select);

foreach ($results as $result) {
    return $result->hits;
}

经过进一步思考,并执行类似的查询,但包含其他信息:

$select->columns(array(
        "searches"    => new Expression("COUNT(time)"),
        "successes"   => new Expression("COUNT(IF(hits > 0, 1, NULL))"),
        "failures"    => new Expression("COUNT(IF(hits = 0, 1, NULL))"),
        "suggestions" => new Expression("COUNT(IF(suggestions > 0, 1, NULL))")
    ));
我认为最好返回resultset中的第一个模型,这只是为了从这些查询中构造信息的一致性

尽管如此,我仍然不是100%赞成这种方法