如何使用Codeigniter的活动记录语法的MySQL数据库增量字段?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (29)

我有以下php-codeigniter脚本,它试图使用Active-Record语法增加记录的字段:

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

这将产生以下SQL:

"UPDATEusersSETvotes= '(votes + 1)' WHEREid= '44'"

它不会运行,但是这个SQL确实完成了我想要的任务:"UPDATEusersSETvotes= (votes + 1) WHEREid= '44'"` <--

注意周围没有引号

有谁知道如何用codeigniter的活动记录语法来实现这种类型的查询呢?

提问于
用户回答回答于

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

之所以可以这样做,是因为第三个(可选的)false参数告诉CodeIgniter不要用backticks保护生成的查询(')。这意味着生成的SQL为:

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

如果你注意到了,后排就会被移除。'(votes+1)',它产生了将选票属性递增1的预期效果。

用户回答回答于
$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);

扫码关注云+社区