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

时间:2013-02-26 07:51:20

标签: zend-framework2 firebird

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

我是否应该为查询中涉及的每个表创建一个模型(其中5个),即使我只需要其中一些的1或2个字段,然后尝试制作一个有效的选择?要么 我应该在数据库上创建一个视图(对于存储过程听起来不是很好),然后将模型基于该视图吗?要么 我应该使用ORM让我的生活更轻松吗?如果是这样,你知道任何与Firebird一起正常工作的吗?或者我不知道,我应该做一些与我提到的事情完全不同的事情?

更新

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

use Zend\Db\Adapter\Adapter as DbAdapter;
use Zend\Db\ResultSet\ResultSet;

...

 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;)

之类的错误

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

1 个答案:

答案 0 :(得分:1)

使用基于DoctrineORM的模块可以帮助解决很多这样的问题,但有时候我更愿意远离它们以简化应用程序的性能。对于复杂的SQL查询,如您列出的那个,我通常只使用zf2附带的SQL适配器。

在您的班级中添加以下使用条款:

use Zend\Db\Adapter\Adapter;

一个例子是这样的:

$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循环。