0

Zend Framework を使い始めたばかりで、その仕組みを理解し始めています。公式ドキュメントを確認し、いくつかのチュートリアルに従いましたが、見つかった例のほとんどは非常に基本的なものでした。アプリケーションでは 1 つまたは 2 つのテーブル (多くても) が使用され、それぞれに対して 1 つのモデルが作成されます。問題はありませんが、現在、いくつかのテーブル (正確には 5 つ) と 1 つのストアド プロシージャを含む複雑な SQL クエリからデータを取得する実際のアプリケーションで作業しています。正直なところ、これをどのように進めるか、どこから始めればよいかさえわかりません。

クエリに含まれるテーブル (5 つ) ごとにモデルを作成する必要がありますか? 一部のテーブルから 1 つまたは 2 つのフィールドしか必要とせず、機能する選択を試みる場合でも? または、データベースにビューを作成し (ストアド プロシージャではあまり良くないように聞こえます)、そのビューに基づいてモデルを作成する必要がありますか? または ORM を使用して生活を楽にする必要がありますか? もしそうなら、Firebird で適切に動作するものを知っていますか? または、私にはわからないので、私が言及したこととはまったく異なることをする必要がありますか?

アップデート

Will の提案と Zend のドキュメントの確認により、アダプタを使用して直接 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;)

値が返されていないようです。これはこのクエリを実行する適切な方法ですか、それとも何か不足していますか? ご協力いただきありがとうございます!

4

1 に答える 1

1

DoctrineORM ベースのモジュールを使用すると、このような作業に大いに役立ちますが、アプリケーションのパフォーマンスをもう少し合理化するために、DoctrineORM から離れた方がよい場合もあります。リストしたような複雑な SQL クエリの場合、通常は zf2 に同梱されている SQL アダプターを使用します。

次の use 句をクラスに追加します。

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 ループを実行できます。

于 2013-02-26T20:50:27.270 に答える