Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

Не срабатывает UPDATE

Здравствуйте. Делаю опросник на 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.

Комментариев нет:

Отправить комментарий