Zend Framework, как отобразить значение запроса SUM

Я создал запрос для Zend Framework, в котором я пытаюсь получить сумму столбца, в данном случае столбца с именем «время». Это запрос, который я использую:

$this->timequery = $this->db_tasks->fetchAll($this->db_tasks->select()->from('tasks', 'SUM(time)')->where('projectnumber =' . $this->value_project));


$this->view->sumtime = $this->timequery;

Повторение запроса говорит мне, что это правильно. Но я не могу правильно повторить результат. В настоящее время я использую:

echo $this->sumtime['SUM(time)'];

Возвращает следующую ошибку:

Catchable fatal error: Object of class Zend_Db_Table_Row could not be converted to string in C:\xampp\htdocs\BManagement\application\views\scripts\tasks\index.phtml  on line 46

Строка 46 - это линия с эхом, на мой взгляд.

Я уже два дня ищу, как это понять или добиться того же результата другим способом. Пытался сериализовать значение, но это тоже не сработало.

Есть ли кто-нибудь, кто знает, как получить общую сумму столбца базы данных?

Любая помощь очень приветствуется!

примечание: довольно новое для zend framework...


person Rick de Graaf    schedule 15.04.2010    source источник


Ответы (2)


В Zend_Db есть несколько полезных служебных методов, таких как fetchAll (которые вы используете), для получения различных типов данных:

  • fetchAll — для набора строк
  • fetchRow - для одной строки
  • fetchOne - для одной ячейки

Проще всего:

$sum = $db->fetchOne('SELECT SUM(time) FROM tasks WHERE project_number = ?', $this->value_project);

Вы также можете использовать Zend_Db_Select с этими методами, как в вашем вопросе:

//note that the SUM(time) part is passed as a Zend_Db expression, as it is not a column
$select = $this->db_tasks->select()
                         ->from('tasks', new Zend_Db_Expr('SUM(time)'))
                         ->where('projectnumber =' . $this->value_project);

$this->timequery = $this->db_tasks->fetchOne($select);

Это работает, потому что объект Zend_Db_Select реализует метод toString для создания SQL.

person David Snabel-Caunt    schedule 21.04.2010
comment
Привет Дэвид, Прежде всего спасибо! Но я все еще получаю сообщение об ошибке: Неустранимая ошибка: вызов неопределенного метода Application_Model_DbTable_Tasks::fetchOne() Означает ли это, что он не может найти fetchOne в классе? Изменение его на fetchRow или fetchAll снова дает ошибку, что он не может преобразовать в строку. Почти готово! - person Rick de Graaf; 22.04.2010
comment
Если разобраться: последнее предложение должно было быть таким: $this-›view-›timequery = $this-›db_tasks-›getAdapter()-›fetchOne($select); Большое спасибо! - person Rick de Graaf; 22.04.2010
comment
Ах, я предполагал, что $this-›db_tasks — это адаптер базы данных, а не Zend_Db_Table. У вас есть правильное решение с getAdapter - person David Snabel-Caunt; 22.04.2010

Вероятно, вам нужен SQL:

SELECT SUM(time) AS time_sum FROM tasks ...

Не уверен, как это сделать в Zend. Потом:

echo $this->sumtime['time_sum'];
person dave1010    schedule 15.04.2010
comment
Уже пробовал это, но я все еще получаю ту же ошибку. Я предполагаю, что запрос хорош, но я не возвращаю результат должным образом... - person Rick de Graaf; 15.04.2010