2016-04-06 61 views
1

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

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); 
      } 

它不返回元素和设备ID的数量,因为它在SELECT中被写入,但返回为SELECT * FROM komentar,但没有值。这是正确的代码或我在我的代码中出现错误?其他查询都可以。

在此先感谢您的帮助。

+0

“devicesID因为它是写在SELECT” - 有一个在您的查询 – RomanPerekhrest

+0

没有'devicesID'栏我的意思是'ured'。 'ured'是我桌子上的专栏。其中我得到的结果是这样的 阵列 ( [komentarID] => [基准] => [sodrzina] => [ured] => [korisnik] => [InputFilter输入] => ) 阵列 ( [komentarID] => [基准] => [sodrzina] => [ured] => [korisnik] => [InputFilter输入] => ) 所有阵列中的元件,除了InputFilter,在我的数据库表中的列是 – Vasil

回答

1

在你的地方,我会做以下步骤:

  • 与​​
  • 替换表达的对象,我不会在group by操作者使用别名,它可能无法正常工作。因此, 与 $select->group('komentar.ured')

而且替换此$select->group('ured'),结果处理应该简化:

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

感谢您的时间和精力来帮助我,我很感激。我做了更改,但不幸的是,结果是一样的。我期待在结果中只有两列。我被困在这整天:@ – Vasil

+1

我找到了解决方案!在我的模型中,我更改了函数返回的$ resultSet。 我改变了 返回$ this-> tableGateway-> selectWith($ select); 分成 $ resultSet = $ sql-> prepareStatementForSqlObject($ select); return $ resultSet-> execute(); 它的工作原理!再次感谢您的时间和努力来帮助我。 – Vasil