Значение приращения CakePHP - PullRequest
1 голос
/ 08 января 2012

Моя проблема выглядит следующим образом:

Я хочу создать приложение для голосования, в котором люди могут выбрать одно или несколько событий (например, Doodle).Для этого я настроил функцию под названием голосование.В представлении вы можете выбрать события, используя флажки.Модели опроса и группового события.Опрос имеет много групповых событий.Моя проблема заключается в том, что когда я вызываю updateAll(), все значения связанных групповых событий увеличиваются.

Вот мой код:

Просмотр:

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 ]

4 голосов
/ 08 января 2012

Похоже, что вы выполняете запрос updateAll для всех групповых событий, назначенных для выбранного опроса:

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

Вам необходимо создать массив с идентификаторами отмеченных групповых событий и добавить условие, которое будет ограничивать обновление только выбранными событиями:

if ($this->Poll->Groupevent->updateAll(
              array('Groupevent.votes'=>'Groupevent.votes+1'),
              array('Groupevent.id IN' => $selectedEventsIds),
              array('Groupevent.poll_id'=>$this->Poll->id))) 
        {
...
0 голосов
/ 08 января 2012

У меня есть приложение, которое я разрабатываю, где я позволяю пользователям (через jQuery) голосовать "за" или "за" определенный комментарий. Вот как я это реализовал. Я в основном вызываю эту функцию через Ajax / jQuery, и она только увеличивает Комментарий на переданный аргумент; В моей таблице комментариев есть 2 поля - «Нравится» и «Не нравится». Один пример, если у waitU и у меня также есть voiceDown, который очень похож.

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

Дайте мне знать, если у вас есть вопросы

...