gpt4 book ai didi

zend-framework - Zend 框架组由

转载 作者:行者123 更新时间:2023-12-04 11:16:38 26 4
gpt4 key购买 nike

我正在尝试使用 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com