CakePHP增量值

时间:2012-01-07 22:01:31

标签: php cakephp has-many increment update-all

我的问题如下:

我想制作一个投票应用,人们可以选择一个或多个事件(如涂鸦)。 为此我设置了一个名为vote的函数。在视图中,您可以选择事件 使用复选框。模特是Poll和Groupevent。民意调查有许多Groupevents。 我的问题是当我调用updateAll()时,相关Groupevents的所有值都是 递增。

这是我的代码:

查看:

echo $this->Form->create('Poll', array('action' => 'vote'));

for($i=0; $i<$count; $i++){
    echo $this->Form->input('Groupevent.'.$i.'.votes', array('type'=>'checkbox', 
        'label'=>$this->Groupevent['startTime']));
    echo $this->Form->input('Groupevent.'.$i.'.id', array('type'=>'hidden'));
}   
echo $this->Form->input('id', array('type' => 'hidden'));   
echo $this->Form->end('vote');

控制器功能:

function vote($id=null){
    $this->Poll->id = $id;
    if ($this->request->is('get')) {
        $this->request->data = $this->Poll->read();
        $this->set('count', $this->Poll->Groupevent->find('count',
            array('conditions'=>array('Groupevent.poll_id'=>$this->Poll->id))));                                               
    } else {
        unset($this->Poll->Groupevent->validate['poll_id']);            
        if ($this->Poll->Groupevent->updateAll(
              array('Groupevent.votes'=>'Groupevent.votes+1'), 
              array('Groupevent.poll_id'=>$this->Poll->id))) 
        {                            
            $this->Session->setFlash('Your poll has been updated.');
            $this->redirect(array('action' => 'edit', $id));
        } else {
            $this->Session->setFlash('Unable to update your poll.');
        }
    }
}

如何使其工作,以便只检查值是否会增加?

提前致谢

编辑:

感谢您对阵列的建议。但我已经尝试过一些不会起作用的方法。如何创建此阵列?

2 个答案:

答案 0 :(得分:4)

看起来您正在为分配给所选投票的所有Groupevents运行updateAll查询:

if ($this->Poll->Groupevent->updateAll(
              array('Groupevent.votes'=>'Groupevent.votes+1'), 
              array('Groupevent.poll_id'=>$this->Poll->id))) 
        { 
...

您需要使用已检查的Groupevents的ID创建一个数组,并添加一个条件,将更新仅限于所选事件:

if ($this->Poll->Groupevent->updateAll(
              array('Groupevent.votes'=>'Groupevent.votes+1'),
              array('Groupevent.id IN' => $selectedEventsIds),
              array('Groupevent.poll_id'=>$this->Poll->id))) 
        {
...

答案 1 :(得分:0)

我正在开发一个应用程序,我允许用户(通过jQuery)投票或向下特定评论。这就是我实现它的方式。我基本上通过Ajax / jQuery调用此函数,它只通过传递的参数递增Comment;我的评论表有2个字段 - 喜欢和不喜欢。一个例子,如果voteUp和我也有voteDown非常相似。

function voteUp($id = null){

    $this->autoRender = false; 
    if($this->RequestHandler->isAjax()){
        $this->Comment->id = $id;
        // Basically I get the value of liked(Field in Db) and increment it by 1
        $this->Comment->saveField('liked',$this->Comment->field('liked')+1);
    }       
    $newValue =  $this->Comment->findById($id);     
    //pass this value back to the view so it is displayed
    //using jQuery
    return $newValue['Comment']['liked'];
}

如果您有任何疑问,请告诉我