Поле инкремента базы данных mysql c использованием синтаксиса активной записи codeigniter
у меня есть следующий 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'
"`
кто-нибудь знает, как реализовать этот тип запрос с синтаксисом активной записи codeigniter?
2 ответа:
вы можете сделать, как показано ниже:
$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.