Группа платформы зенда

Я пытаюсь сделать группу при помощи платформы Зенда. Вот мой код:

$table = new TableClass();
$select = $table->select();
$select->from ("table", array("date", "column1" => "sum(column1)"));
$select->group ( array ("date") );
$results = $table->fetchAll ($select);
$result = $results[0];
$date = $result->date;
$column1 = $result->column1;

TableClass расширяет 'Zend_Db_Table_Abstract'.

Я вижу запрос путем рассмотрения mysql журнала запросов. Запрос хорошо формируется - column1, назван в запросе и взгляде результатов, корректном, если я выполняю запрос в mysql инструментальных средствах.

Я не могу получить доступ к данным в 'column1' - я всегда получаю это исключение:

Неперехваченное исключение 'Zend_Db_Table_Row_Exception' с сообщением 'Указало, что столбец "column1" не находится в строке'

Я могу однако получить доступ к столбцу даты без проблемы.

Я попробовал:

  • доступ к столбцам индексом массива: $result [0], но Вы добираетесь, исключение (не может получить доступ к столбцам индексом).

  • не используя псевдоним столбца: $select-> от ("таблица", массив ("дата", "сумма (column1)")); $column1 = $result ["сумма (column1)"]; но Вы получаете исключение (никакой такой столбец "сумма (column1)").

  • добавление Zend_Db_Expr: "column1" => новый Zend_Db_Expr ("сумма (column1)"), но это не помогает.

Некоторые другие примеры, которые я видел, предлагают использование имен столбцов без агрегатных функций, т.е. "column1" вместо "суммы (column1)", но это, кажется, мне не ответ - запрос не имеет никаких агрегатных функций в нем так mysql, не будет знать, что сделать с ним.

Любая справка ценится.

7
задан 19 June 2010 в 05:02
поделиться

1 ответ

Во-первых, небольшой совет по работе с Zend_Db_Select (и с расширением Zend_Db_Table_Select), вы можете просмотреть сгенерированный SQL, вызвав метод toString. Очень важно убедиться, что ваш код генерирует правильный запрос, прежде чем работать с набором результатов:

$select = $table->select();
$select->from ("table", array("date", "column1" => "sum(column1)"));
$select->group ( array ("date") );

$sql = (string) $select; //Retrieve SQL as a string

Или просто

die($select); //print SQL

Я написал следующий тестовый сценарий, используя ваш пример, и у меня нет проблем:

class Table extends Zend_Db_Table_Abstract 
{
    protected $_primary = 'id';
    protected $_name = 'table';
}

$db = Zend_Db::factory('Pdo_Mysql', array(
    'dbname' => 'test',
    'username' => 'root',
    'password' => '',
    'host' => 'localhost'
));

$table = new Table($db);

$select = $table->select();
$select->from ($table, array("date", "column1" => new Zend_Db_Expr("sum(column1)")));
$select->group ( array ("date") );
$sql = (string) $select;

echo $sql;

$results = $table->fetchAll ($select);
$result = $results[0];
$date = $result->date;
$column1 = $result->column1;

echo '<br>' . $date . ': ' . $column1;

Используйте Zend_Debug :: dump ( $ результат); для проверки данных внутри Zend_Db_Table_Row, если это необходимо.

В моем случае сгенерированный SQL выглядит следующим образом:

SELECT `table`.`date`, sum(column1) AS `column1` FROM `table` GROUP BY `date`
9
ответ дан 7 December 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: