1

現在、クラブのIDでクラブに関する情報を取得したページがあります。これで、そのクラブに関するコメントを取得するコメントボックスができました。コメントテーブルにclub_idがあり、パラメーター「club_id」がこのページに渡されます。現時点では、テーブルからすべてのコメントを取得していますが、そのクラブのコメントだけが必要です。正しい方向へのポイントは素晴らしいでしょう!

コントローラ:

class ClubDescriptionController extends Zend_Controller_Action
{

public $auth = null;

public function init()
{
    $this->auth=Zend_Auth::getInstance();
}

http://pastebin.com/m66Sg26x
protected function authoriseUser()
{
    if (!$this->auth->hasIdentity()) {
            $route = array('controller'=>'auth', 'action'=>'index');
            $this->_helper->redirector->gotoRoute($route);

        }
    }
}

モデル:

class Application_Model_DbTable_Comments extends Zend_Db_Table_Abstract
{

protected $_name = 'comments';

public function getComment($id) {
    $id = (int) $id;
    $row = $this->fetchRow('id = ' . $id);
    if (!$row) {
        throw new Exception("Count not find row $id");
    }
    return $row->toArray();
}

public function addComment($comment, $club_id) {
    $data = array(
        'comment' => $comment,
        'club_id' => $club_id,
        'comment_date' => new Zend_Db_Expr('NOW()'),
        );
    $this->insert($data);
    }   

    public function deleteComment($id) {
    $this->delete('id =' . (int) $id);
    }
}

景色:

<div id="view-comments">
        <?php foreach($this->comments as $comments) : ?>
            <p id="individual-comment">
                <?php echo $this->escape($comments->comment);?> - 
                <i><?php echo $this->escape($comments->comment_date);?></i>
            </p>
        <?php endforeach; ?>
</div>

getComment()を使用する必要があることに気付きました。私のモデルで関数を実行し、IDでクエリを実行しますが、正確にどのように...

ありがとう

4

3 に答える 3

0

あなたのコントローラーであなたは呼んでいます

$this->view->comments = $comments->fetchAll();

そのはず

$this->view->comments = $comments->getComment($this->_request->getParam('club_id'));

ここで、id変数はurlからフェッチされます。

于 2012-04-24T17:40:17.287 に答える
0

Db_Tableを使用してからしばらく経ちましたが、正しいclub_idを持つコメントを選択するクエリを作成できるselectオブジェクトを作成したいと思います。

$comments = new Application_Model_DbTable_Comments();
$select = $comments->select();
$select->where('club_id = ?', $id);

$this->view->comments = $comments->fetchAll($select);

コメントを日付順に並べ替えることができます。その場合は、selectにorder句を追加することでこれを行うことができます。

$select->order('comment_date ASC');

かなりの数の例があるZend_Db_Table_Selectのドキュメントを見てください:http://framework.zend.com/manual/en/zend.db.table.html#zend.db.table.fetch-all

于 2012-04-24T19:45:14.453 に答える
0

動作しているコントローラーは次のとおりです。

public function indexAction() {
    //authorisation
    $this->authoriseUser();
    //to get the paramter club_id to query for specific club information
    $id = (int) $this->_request->getParam('club_id', 0);

    //submit a comment
    $form = new Application_Form_Comment();
    $form->submit->setLabel('Comment');
    $this->view->form = $form;
    if ($this->getRequest()->isPost()) {
        $formData = $this->getRequest()->getPost();
        if ($form->isValid($formData)) {
            $comment = new Application_Model_DbTable_Comments();
            $comment->addComment($formData['comment'], $id);
        } else {
            $form->populate($formData);
        }
    }

    //initialise table
    $clubs = new Application_Model_DbTable_Clubs();
    $clubs = $clubs->getClub($id);
    $this->view->clubs = $clubs;

    //to get the comments for the club
    $comments = new Application_Model_DbTable_Comments();
    $select = $comments->select();
    $select->where('club_id = ?', $id);
    $select->order('comment_date ASC');

    $this->view->comments = $comments->fetchAll($select);
}
于 2012-04-25T19:06:41.743 に答える