zend-framework - Zend 框架组由

标签 zend-framework zend-db

我正在尝试使用 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)”)。
  • 投入 Zend_Db_Expr:
    "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/

    相关文章:

    mysql - Zend\Db : Select from subquery

    php - 我正在使用 zend 框架开始一个新项目,并希望获得一些资源来帮助我

    apache - ioncube加载器问题: undefined symbol: zend_execute_ex

    php - 在 Zend Lucene 中将范围查询与多项查询相结合

    php - 文件中的 Zend 元数据缓存

    mysql - 如何在 Zend Framework 2 中设置 sql_mode?

    php - Zend Framework 2 - 注释表单和 Doctrine2 - 可捕获的 fatal error - ObjectManager

    javascript - 从 onChange 事件填充 FilteringSelect 数据存储

    PHP > Zend 框架 > Zend_Money

    php - 使用 php 和 zend 框架导入大型 .sql 文件