Инкрементное поле базы данных mysql с использованием синтаксиса активной записи codeigniter - PullRequest
57 голосов
/ 16 июня 2011

У меня есть следующий скрипт php-codeigniter, который пытается увеличить поле записи с использованием синтаксиса active-record:

$data = array('votes' => '(votes + 1)');
$this->db->where('id', $post['identifier']);
$this->db->update('users', $data);

Это приводит к следующему SQL:

"UPDATE Пользователи SET голосов = '(votes + 1)' WHERE ID = '44' "

Что не работает, но этот SQL делает то, что я ищу: "UPDATE пользователи SET голоса = (votes + 1) WHERE id = '44' "` <- обратите внимание на отсутствие кавычек (голосов + 1) </p>

Кто-нибудь знает, как реализовать этот тип запроса с синтаксисом активной записи codeigniter?

Ответы [ 2 ]

112 голосов
/ 23 июня 2011

Вы можете сделать как указано ниже:

$this->db->where('id', $post['identifier']);
$this->db->set('votes', 'votes+1', FALSE);
$this->db->update('users');

Причина, по которой это работает, заключается в том, что третий (необязательный) параметр FALSE указывает CodeIgniter не защищать сгенерированный запрос обратными галочками ('). Это означает, что сгенерированный SQL будет:

UPDATE users SET votes= votes + 1 WHERE id= '44'

Если вы заметили, обратные пометки удаляются из '(votes+1)', что дает желаемый эффект увеличения атрибута голоса на 1.

4 голосов
/ 19 июля 2013
$data = array('votes' => 'votes + 1');

foreach ($data as $key=>$val) {
    $this->db->set($key, $val, FALSE);
}

$this->db->where('id', $post['identifier']);
$this->db->update('users', $data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...