1

私は3つのテーブルを持っています:

ユーザー[ID、名前、ユーザー名、パスワード、役割]

イベント[ID、日付、場所、名前]

参加者[ID、ユーザーID、イベントID]

そして、特定のユーザーが参加したすべてのイベントを選択したいと考えています。このために、テストして目的の結果を返したSQLクエリを作成しました。

SELECT * FROM event
INNER JOIN participant ON participant.eventId = event.id
WHERE participant.userId = $id

この後、このサイトの他の投稿に従って機能するはずの zend リクエストに変えてみました。

public function getEvents($id) 
{
    $db = Zend_Db_Table::getDefaultAdapter();
    $select = $db->select();

    $select->from('event')
           ->joinInner('participant','participant.eventId = event.id')
           ->where('participant.userId = ?', $id);

    $res = $db->query($select)->fetchAll();
    return $res;
}

「PDO_MYSQL」をアダプターとして使用していますが、テーブルへの挿入、テーブル全体または特定の行の選択に問題はありません。しかし、上記のコードは、私が望むものの代わりに単純な fatchall() を実行しているようです。そして、それを変更しようとしても、常にイベントテーブルのコンテンツが返されます。

私の質問は次のとおりです。なぜこれが起こっているのか、誰にも分かりますか?

4

1 に答える 1

0

ここにあなたが試すことができるものがあります:

// this is the action in your controller
public function testAction()
{
    // call getEvents, assign the result to the view
    $this->view->results = $this->_getEvents(1);

}

protected function _getEvents($id)
{
    $db     = Zend_Db_Table::getDefaultAdapter();
    $select = $db->select()
                 ->from('event')
                 ->joinInner('participant','participant.eventId = event.id')
                 ->where('participant.userId = ?', $id);

    //echo $select; // you can echo the select object to see the resulting query

    $results = $select->query(); // actually execute the query

    return $results->fetchAll(); // return all results as an array to caller
}

次に、ビュー スクリプトに入れるサンプル コードを次に示します。

<?php if (sizeof($this->results) == 0): ?>
<strong>No results found!</strong>
<?php else: ?>

Found <?php echo sizeof($this->results) ?> results.<br /><br />

<?php foreach($this->results as $result): ?>
    On <?php echo $result['date'] ?> the user participated in <em><?php echo $result['name'] ?></em> @ <?php echo $result['location'] ?><br />
<?php endforeach; ?>


<?php endif; ?>

最終的に ZF に慣れてきたら、データをフェッチするためのモデルとデータ マッパー クラスを作成する必要があります。関数は、データマッパーgetEventsクラスに常駐します。

次に、MVC の分離に続いて、コントローラーは、DB との通信と結果の処理を担当するデータ マッパーにデータを要求します。コントローラーはマッパーから返されたデータを取得し、それをビューに割り当てます。ビューからデータを取得したくはなく、コントローラーによって与えられたデータのみを表示します。

ZF を初めて使用する場合、 Zend Framework クイックスタートが非常に役立つことがわかりました。1回読み直して、必要に応じてもう一度読み返し、実際にサンプルアプリを作成して感覚をつかんでください。それが私が ZF を使い始めたときのやり方であり、以前よりもコントローラーとデータ マッパーの開始点がはるかに優れていました。

このガイドを完了すると、リファレンス ガイドを読むのがずっと簡単になり、意味も理解できるようになります。

于 2012-07-21T19:59:25.440 に答える