Zend Framework, как отобразить значение запроса SUM - PullRequest
3 голосов
/ 15 апреля 2010

Я создал запрос для 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 ...

Ответы [ 3 ]

9 голосов
/ 22 апреля 2010

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.

1 голос
/ 24 декабря 2012
$timequery= $timequeriestb->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
                          ->columns('SUM(time) AS Totaltime')
                          ->where('projectnumber ='. $this->value_project));
0 голосов
/ 15 апреля 2010

Возможно, вам нужен SQL:

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

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

echo $this->sumtime['time_sum'];
...