Здравствуйте. Делаю опросник на yii2. Отметил чекбокс - нажал голосовать - счетчики обновились. Это работает, но есть одно "но". UPDATE запрос не срабатывает на счетчиках у которых значение 0, ошибок нет, но и результата нет. Если же у поля будет какое-либо значение отличное от 0, то все хорошо срабатывает. При этом если выполнить нужный запрос в phpmyadmin, то даже с 0 значения обновляются.
Вот код с запросами из контроллера:
public function actionPoll($id)
{
$single = Poll::getOne($id);
if ($single->load(Yii::$app->request->post())) {
if ($single->count1) {
Yii::$app->db->createCommand("UPDATE poll SET count1 = count1 +1 WHERE id=$id")->execute();
}
if ($single->count2) {
Yii::$app->db->createCommand("UPDATE poll SET count2 = count2 +1 WHERE id=$id")->execute();
}
if ($single->count3) {
Yii::$app->db->createCommand("UPDATE poll SET count3 = count3 +1 WHERE id=$id")->execute();
}
}
return $this->render('poll', ['single' => $single]);
}
А вот запрос который нормально выполняется в phpmyadmin:
UPDATE `poll` SET `count2` = `count2` +1 WHERE `id` = 2
Также прикрепляю представление:
field($single, 'count1')->checkbox(['label' => '', 'value' => $single->count1]) ?>
Подскажите пожалуйста в чем может быть проблема ?
Ответ
Проблема в том, что Вам не стоит указывать value в методе checkbox. Это потому, что метод checkbox автоматически считывает данные с модели. Вот как нужно вывести Вам checkbox:
field($single, 'count1')->checkbox(['label' => '']) ?>
Также хочу отметить, что Вы можете обновлять счетчики следующим способом:
$single->updateCounters(['count1' => 1]); //равносильно count1 = count1 + 1
В итоге следует также отметить, что если Вы не используете ActiveRecord, то Вам следует посмотреть в сторону PDO.
Комментариев нет:
Отправить комментарий