在CodeIgniter上使用代码更新数据而不删除旧文件


Update data without deleting old files with code at CodeIgniter

我有如下示例的数据,当我尝试添加新数据时,示例我想在id 02上添加名称philips,但在我更新名称ana, jack以删除并存储名称philips之后,是否有其他方法可以使用添加一个名称来更新表而不删除旧数据?

 id   |         name       |  class
--------------------------------------
 01   | smith, john, billy |   III
 02   | ana, jack,         |   IV
控制器

$id = $this->uri->segment(3);;
$this->my_model->update_name($id);

模型
function update_name($id) {
    $data = array(                  
        'name' => $this->input->post('name'));              
    $this->db->where('id', $id);
    $this->db->update('mytable', $data);
}

您可以使用MySQL CONCAT(),在您的情况下,它将是这样的:

function update_name($id) {
    $name = $this->input->post('name');                  
    $this->db->set('name', "CONCAT(name,', ','".$name."')", FALSE);
    $this->db->where('id', $id);
    $this->db->update('mytable', $data);
}

p。S:最好不要在你的模型中访问你的post输入,相反,你应该在你的控制器中验证它,然后把它作为一个参数传递给你的模型。

我认为这里有两种选择,第一种是从字段中收集信息,并使用PHP将两个字符串连接在一起。

$current_names = $this->db->select( 'name' )->from( 'mytable' )-.where( 'id', $id )->get()->result();
$new_names = $current_names.', '.$this->input->post( 'name' );
function update_name($id) {
    $data = array(                  
                  'name' => $new_names
                 );              
    $this->db->where('id', $id);
    $this->db->update('mytable', $data);
}

第二个是使用更传统的sql语句与concat,我没有测试过这个,但接近这个应该工作。

$query = 'UPDATE  `mytable` SET name = CONCAT(`name`, ' ;
$query .=  ",'$this->input->post( 'name' )'";
$query .= ') WHERE `id` = ' . $id;
$this->db->query($query);

这种方法是从这里采取的,虽然它是CI2它仍然应该工作,Codeigniter 2.1 - MySQL CONCAT(追加字符串)