Ответ 1
Кто-то на другом форуме был достаточно любезен, чтобы дать мне ответ на этот вопрос. Вот как это делается:
$select->columns(array('num' => new \Zend\Db\Sql\Expression('COUNT(*)')));
Я пытаюсь сделать такой запрос, используя 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;