4

这可能/真的吗?

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

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

不是什么大问题..只是在寻找澄清并想知道是否有人知道这一点。

4

3 回答 3

8

我在此链接中找到了一个很好的解决方案,如果有人仍在寻找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
                                      ));  
于 2014-07-05T11:07:46.193 回答
5

也许您正在寻找的是这个INSERT ... ON DUPLICATE KEY UPDATE- 前提是您使用的是 MySQL 并且您id是表上的唯一键。

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

于 2013-04-07T08:15:51.953 回答
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)的模型中。

这是一种应该有效的解决方案。让我们知道。

于 2013-04-08T08:16:16.297 回答