CodeIgniter update()默认为insert()

时间:2013-04-07 07:16:20

标签: codeigniter sql-update

这可能/是真的吗?

例如,如果我想更新id为1的行,但不存在行,则此功能(更新功能)会自动 插入 一个新行用给定的数据?是否有参数来启用它?

如果没有,那么处理这个问题的最佳方法是什么(如果可能的话),而不使用单独的函数来评估表,如果行存在则返回bool。 (然后从那里更新或插入)

没有太大的问题..只是在寻找澄清,并想知道是否有人知道这一点。

3 个答案:

答案 0 :(得分:8)

我在link中找到了一个很好的解决方案,我希望如果有人仍然在寻找 codeigniter 中的解决方案,这会有所帮助:

$sql = 'INSERT INTO menu_sub (id, name, desc, misc)
        VALUES (?, ?, ?, ?)
        ON DUPLICATE KEY UPDATE 
            name=VALUES(name), 
            desc=VALUES(desc), 
            misc=VALUES(misc)';

$query = $this->db->query($sql, array( $id, 
                                       $this->validation->name, 
                                       $this->validation->desc, 
                                       $this->validation->misc
                                      ));  

答案 1 :(得分:5)

如果你正在使用MySQL,而你的id是桌面上的唯一键,那么你可能正在寻找的是INSERT ... ON DUPLICATE KEY UPDATE

您必须手动构造查询并传递给$this->db->query()函数,而不是任何内置的活动记录,如数据库驱动程序的辅助函数。

答案 2 :(得分:1)

我不知道你为什么要使用它,但是处理这个问题的一种方法(使用你请求的一个函数)如下:

function update_or_insert($data){

    if(!array_key_exists('id',$data))
        return $this->db->insert($data);

    $row = $this->db->get_where('mytable',['id' => $data['id']])->row();

    if(!$row) return false;

    $this->db->where($row->id);
    return $this->db->update('my_table',$data); 
}

$ data可以是从控制器传递的整个$ _POST数组。我会将此函数放在表示表(my_table)的模型中。

这是一个应该有效的解决方案。请告诉我们。