У меня есть данные, подобные приведенному ниже примеру, когда я пытаюсь добавить новые данные, в примере я хочу добавить имя philips
на id
02
но после того, как я обновил имя 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); }
PS: Лучше не обращаться к вашему сообщению в вашей модели, вместо этого вы должны проверить его в своем контроллере, а затем передать его в свою модель в качестве параметра.
Я думаю, у вас есть два варианта: сначала нужно собрать информацию из поля и использовать 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 (добавить строку)