0

編集 - 元のエラーを修正しましたが、まだ別のエラーがあります

「Upvote」をクリックすると、「投票を保存できませんでした」というメッセージが表示されます。これは、何らかの理由で適切にクエリが実行されていないことを意味します (そうでない場合、レコードが保存されていないことがわかります)。また、「未定義のインデックス」というエラーが表示されますが、それが何を指しているのかわかりません。

これが私のテーブルです

Votes
id |  user_id | vote

Posts
id |  title | body | created | modified | user_id | vote_total

これは、posts/index.ctp にある賛成票へのリンクの 1 つです。

<td><?php echo $this->Html->link('Upvote', array('action' => 'vote', $post['Post']['id']))?>

したがって、postscontroller.php にある投票機能は次のとおりです。

public function vote($id=null){

$this->Post->Votes->recursive = 0;

$this->Post->id = $id;
$user = $this->Auth->User();
$userid = $user['id'];
$conditions = array('votes.id' => $id, 'votes.user_id' => $userid, 'votes.vote' => '1');

$data = $this->Post->Votes->find('All' , array('conditions'=>$conditions));

if (isset($data) && !empty($data)) {
    echo '<p>User have already give a vote!</p>';
} else {

    if($this->Post->Votes->validates()){
        if ($this->Post->Votes->save($this->request->data)) {
                $this->Session->setFlash(__('The vote has been saved'));
        } else {
                $this->Session->setFlash(__('The vote could not be saved. Please, try again.'));
        }
    }   
}
}

この関係は私の Post.php モデルにあります。

public $hasMany = array(
    'Votes' => array(
        'foreignKey' => 'id'
        )
    );

この関係は User.php モデルにあります

public $hasMany = array(
    'Posts' => array(
        'className'  => 'Post'
        )
    );
4

2 に答える 2

2

これを試して

コントローラーに追加する

<?php

public function vote($id=null){

    $this->layout = 'votes_layout';
    $this->Vote->recursive = 0;

    $user = $this->Auth->User();
    $userid = $user['id'];
    $conditions = array('Vote.post_id' => $id, 'Vote.user_id' => $userid);


    $data = $this->Vote->find('All' , arrar('conditions'=>$conditions));

    if (isset($data) && !empty($data) {
        echo '<p>User have already give a vote!</p>';
    } else {

        if($this->Vote->validates()){

            if ($this->Vote->save($this->request->data)) {
                    $this->Session->setFlash(__('The vote has been saved'));
                    $this->redirect(array('action' => 'vote'));
            } else {
                    $this->Session->setFlash(__('The vote could not be saved. Please, try again.'));
            }
        }   
    }

}
于 2012-08-03T03:51:00.300 に答える
1

このプラグインがあなたのケースに役立つかもしれません:

https://github.com/CakeDC/ratings

これには、アプリ内の他のモデル レコードに関連付けることができる投票 (または評価) システムのロジックが含まれています。

于 2012-08-03T07:58:13.107 に答える