Valor de incremento de CakePHP

Mi problema se ve de la siguiente manera:

Quiero hacer una aplicación de votación donde las personas puedan elegir uno o más eventos (como Doodle). Para esto he configurado una función llamada voto. En la vista puede elegir los eventos usando casillas de verificación. Los modelos son Poll y Groupevent. Una encuesta tiene muchos Groupevents. Mi problema es cuando llamo a updateAll() , todos los valores de los Groupevents asociados se incrementan.

Aquí está mi código:

Ver:

 echo $this->Form->create('Poll', array('action' => 'vote')); for($i=0; $iForm->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'); 

Función del controlador:

 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.'); } } } 

¿Cómo puedo hacer que funcione, para que solo los valores comprobados se incrementen?

gracias por adelantado

Editar:

Gracias por la sugerencia con la matriz. Pero he probado ciertas formas en que no funcionará. ¿Cómo creo esta matriz?

Parece que está ejecutando una consulta de updateAll para todos los Groupevents asignados a una encuesta seleccionada:

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

Debe crear una matriz con los ID de Groupevents marcados y agregar una condición que limitará la actualización solo a los eventos seleccionados:

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

Tengo una aplicación que estoy desarrollando donde les permito a los usuarios (a través de jQuery) votar hacia arriba o hacia abajo un comentario específico. Así es como lo implementé. Básicamente llamo a esta función a través de Ajax / jQuery y solo incrementa el Comentario por el argumento pasado; Mi tabla de comentarios tiene 2 campos – Me gustó y no me gustó. Un ejemplo si voteUp y yo también tenemos voto, que es bastante similar.

 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']; } 

Avísame si tienes más preguntas