ZF2中的SELECT(COUNT(*))查询

时间:2016-04-06 19:24:14

标签: php mysql zend-framework zend-framework2

我尝试使用在ZF2中包含COUNT(*)表达式的表网关执行SQL查询。这是我模型中的功能:

public function brKomentariUred(){
        $sql = $this->tableGateway->getSql();
        $select = $sql->select();
        $select->columns(array('brKomentari' => new \Zend\Db\Sql\Expression('count(komentarID)'), 'uredId' => 'ured'));
        $select->group('ured');
        //echo $sql->getSqlStringForSqlObject($select); die();
        return $this->tableGateway->selectWith($select);      
    }

打印查询时,它是正确的

SELECT count(komentarID) AS `brKomentari`, `komentar`.`ured` AS `uredId` FROM `komentar` GROUP BY `ured`

在控制器中我尝试使用此代码调用查询

foreach($this->getKomentarTable()->brKomentariUred() as $r){
                $arr = $this->object_to_array($r);
                print_r($arr);
            }

它不会返回在SELECT中写入的元素和devicesID的数量,但返回为SELECT * FROM komentar,但没有值。这是正确的代码还是我的代码中出现了一些错误?其他查询都可以。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在我的位置,我会执行以下步骤:

  • new \Zend\Db\Sql\Expression('COUNT(komentarID)')
  • 替换表达式对象
  • 我不会在group by运算符中使用别名,它可能无效。所以, 将此$select->group('ured')替换为 $select->group('komentar.ured')

此外,应简化结果处理:

$resultSet = $this->getKomentarTable()->brKomentariUred();
print_r($resultSet->toArray());