Zend框架2:使用适配器执行SQL查询



我刚刚开始使用Zend框架,并开始了解它是如何工作的。我已经检查了官方文档,并遵循了几个教程,我发现的大多数示例都非常基本:在应用程序中使用一个或两个表(最多),并为每个表创建一个模型。这没有问题,但是现在我正在一个实际的应用程序中工作,我从一个复杂的sql查询中获取数据,该查询包括几个表(准确地说是5个)和一个存储过程。老实说,我不知道如何继续下去,甚至从哪里开始尝试。

我是否应该为查询中涉及的每个表(其中5个)创建一个模型,即使我只需要其中一些表中的1或2个字段,然后尝试进行选择?或我是否应该在数据库上创建一个视图(对于存储过程来说听起来不太好),然后将模型建立在该视图上?或我是否应该使用ORM来简化我的工作?如果有,你知道有什么可以和火鸟一起工作的吗?还是我不知道,我应该做一些完全不同于我提到的事情?

根据Will的建议和检查Zend的文档,我决定使用适配器直接以SQL格式进行查询,但它还没有完全工作。到目前为止,我在控制器中所拥有的是:

use ZendDbAdapterAdapter as DbAdapter;
use ZendDbResultSetResultSet;

 public function indexAction() {
    $db = new DbAdapter(array(
    'driver'         => 'Pdo',
    'dsn'            => 'firebird:host=127.0.0.1;port=3050;dbname=C:\wamp\www\Reports\data\THdata.GDB',
    'username' => 'SYSDBA',
    'password' => 'masterkey' ));    
    $sql = 'SELECT SELITE FROM TILIKAUSI WHERE COMPANYID = 1'; //I am starting with a simple query first.      
    $sql_result = $db->createStatement($sql, array(125000, 125200))->execute();
    if($sql_result->count() > 0){
    $results = new ResultSet();
    $this->view->data = $results->initialize($sql_result)->toArray();
    }
    return $this->view;
    }

结果是类似Creating default object from empty value in (Controller path, line: $this->view->data = $results;)

的错误。

似乎没有返回任何值。这是一个适当的方式做这个查询还是我错过了什么?谢谢你的帮助!

使用基于DoctrineORM的模块可以帮助解决很多这样的问题,但是有时我宁愿远离它们,以便更有效地简化我的应用程序。对于像您列出的那样复杂的sql查询,我通常只使用zf2附带的sql适配器。

将下面的use子句添加到你的类中:

use ZendDbAdapterAdapter;

一个例子是这样的:

$adapter = new Adapter(array('driver' => 'mysqli',
 'host' => 'localhost',
 'port' => '3306',
 'dbname' => 'test',
 'username' => 'test',
 'password' => 'test'));
 $list = $adapter->getDriver()->getConnection()->execute('Add your complex query as you currently have it');

当数据返回时,您将能够对$items数组执行标准的foreach循环。

相关内容

  • 没有找到相关文章

最新更新