Я пытаюсь сделать такой запрос, используя Zend Framework 2:
SELECT count(*) as num FROM mytable
Вот код, который я использую, чтобы построить мой оператор select (помните, что я импортировал необходимые классы):
$select = new Select(); $select->from('mytable') ->columns(array('num'=>'count(*)'), false);
Этот код не работает, потому что полученный запрос выглядит следующим образом:
SELECT [count(*)] AS [num] FROM [mytable]
… который вызывает следующую ошибку:
Invalid column name 'count(*)'
Это вызвано квадратными скобками вокруг count (*). Как я могу заставить это работать правильно, в основном, чтобы иметь счетчик (*) вместо [count (*)] в SQL. Кроме того, я знаю, что вы можете сделать это с помощью обычного запроса, но мне нужно это для работы с объектом Select. Насколько я знаю, это использовалось для работы с предыдущими версиями Zend, я видел множество решений для них, но ничего для Zend Framework 2.
Кто-то на другом форуме был достаточно любезен, чтобы дать мне ответ на этот вопрос. Вот как это делается:
$select->columns(array('num' => new \Zend\Db\Sql\Expression('COUNT(*)')));
Да, без new \Zend\Db\Sql\Expression('COUNT(*)')
, только COUNT(*)
приводит к следующему выражению ошибки:
SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец 'albs.COUNT (*)' in 'field list'
Имея
new \Zend\Db\Sql\Expression('COUNT(*)')
разрешил его.
Не могли бы вы попробовать этот код?
$this->num = $select->columns(array('num' => new \Zend\Db\Sql\Expression('COUNT(*)'))); return $this->num;