我正在尝试使用 Zend 框架做一个小组。这是我的代码:
$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”不在行中”
但是,我可以毫无问题地访问日期列。
我试过:
$结果[0]
但是你得到一个异常(不能通过索引访问列)。
$select->from ("table", array("date", "sum(column1)"));
$column1 = $result["sum(column1)"];
但是你得到一个异常(exception)(没有这样的列“sum(column1)”)。
"column1"=> new Zend_Db_Expr ("sum(column1)")
但这无济于事。
我见过的其他一些例子建议使用没有聚合函数的列名,即。 “column1”而不是“sum(column1)”,但在我看来这不是答案——查询中没有任何聚合函数,所以mysql不知道如何处理它。
任何帮助表示赞赏。
最佳答案
首先,使用 Zend_Db_Select(以及扩展 Zend_Db_Table_Select)的快速提示,您可以通过调用 toString 方法查看生成的 SQL。在处理结果集之前验证您的代码是否生成了正确的查询至关重要:
$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($result);必要时检查 Zend_Db_Table_Row 内的数据。
在我的情况下,生成的 SQL 如下:
SELECT `table`.`date`, sum(column1) AS `column1` FROM `table` GROUP BY `date`
关于zend-framework - Zend 框架组由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3074286/