Как подсчитать количество строк в Zend Framework 2

Мне нужно подсчитать строки результатов запроса MySql. здесь я расширил класс TableGateway до моего класса, это мой код.

 public function get_num_of_rows(){ $sql = 'SELECT count(q_no) FROM questions'; //code ???????????????? $result = $this->select(); return $result; } 

Итак, как я выполняю SELECT count(q_no) FROM questions ?

Нет необходимости писать собственный SQL-запрос. Когда вы делаете $ this-> select (), вы получаете экземпляр Zend \ Db \ ResultSet \ ResultSet. В ResultSet есть счет метода.

 $result = $this->select(); return $result->count(); 

Но не забудьте добавить к вашему адаптеру базы данных 'options' => array('buffer_results' => true) .

ОБНОВИТЬ:

Это самая глупая вещь, которую я когда-либо писал. Всегда возвращайтесь с ресурса, требуемого только для данных. Здесь вам нужно только 1 скаляр. Поэтому https://stackoverflow.com/a/13810175/1353837 верен.

Если ваша таблица имеет огромное количество записей, вы можете получить ошибку памяти, если используете

 $result->count(); 

Вместо этого используйте это, вы можете избежать того же

 $select->from('TABLE_NAME')->columns(array('COUNT'=>new \Zend\Db\Sql\Expression('COUNT(*)'))); 

Для ZF-2 попробуйте этот пример кода:

  <?php //var/www/html/zend_app/module/Api/src/Api/Model/ApiTable.php namespace Api\Model; use Zend\Db\TableGateway\AbstractTableGateway; use Zend\Db\Adapter\Adapter; use Zend\Db\ResultSet\ResultSet; use Zend\Db\Sql\Select; use Zend\Db\Sql\Sql; use Zend\Db\Sql\Where; use Zend\Db\Sql\Expression; class ApiTable extends AbstractTableGateway { public function __construct(Adapter $adapter) { $this->adapter = $adapter; $this->resultSetPrototype = new ResultSet(); $this->resultSetPrototype->setArrayObjectPrototype(new Api()); $this->initialize(); } public function countTableData($from, $whereData = NULL) { $sql = new Sql($this->adapter); $select = $sql->select(); $select->from($from); if($whereData) { $select->where($whereData); } $statement = $sql->prepareStatementForSqlObject($select); $results = $statement->execute(); $resultSet = new ResultSet; $resultSet->initialize($results); $resultSet->buffer(); return $resultSet->count(); } } 

НТН.

Или это:

 $select->join('reports', 'user.user_id = reports.ruser_id', array('sdays' => new \Zend\Db\Sql\Expression('COUNT(rhours)')),$select::JOIN_INNER); $select->group('ruser_id');