2013-03-21 3 views
0

У меня есть форма для сайта отеля, где я хочу обновить его услуги, и клиент хочет обновлять сразу несколько сервисов. Однако я потерял, как сохранить его в базе данных с помощью модели.Как сохранить несколько строк в mysql с помощью codeigniter

Я уже построил мой контроллер, это выглядит примерно так:

$items = array(
     array(
       'id'   => $this->input->post('id1', true), 
       'hotel_id'  => $hotel_id, 
       'des_servicio' => $this->input->post('des_servicio1', true), 
       'est_activo' => $this->input->post('est_activo1', true) 
     ), 
     array(
       'id'   => $this->input->post('id2', true), 
       'hotel_id'  => $hotel_id, 
       'des_servicio' => $this->input->post('des_servicio2', true), 
       'est_activo' => $this->input->post('est_activo2', true) 
     ), 
     array(
       'id'   => $this->input->post('id3', true), 
       'hotel_id'  => $hotel_id, 
       'des_servicio' => $this->input->post('des_servicio3', true), 
       'est_activo' => $this->input->post('est_activo3', true) 
     ) 
); 

$this->hotel_model->save_multiple($items); 

[UPDATE]

это как моя новая модель выглядит следующим образом:

function save_multiple($items = array()) 
{ 
    $this->db->insert_batch($this->__tabla, $items); 
    return $this->db->affected_rows(); 
} 

Моя проблема заключается в том, что теперь он создает 10 строк (моя первоначальная форма имеет 10 полей), даже если я заполню только 3 поля. Поэтому в моей базе данных хранятся 3 службы, а также 7 пустых строк. Как это изменить?

+0

Вы также можете посмотреть $ this-> db-> insert_batch ('mytable', $ items); – Aaron

+0

@ Аарон спасибо, это очень полезно, но теперь у меня есть проблема, о которой я упоминаю, поля не являются необязательными и создают пустые строки, когда я их не заполняю. Поскольку я упоминаю, что моя оригинальная форма имеет 10 полей, поэтому, когда я заполняю только 2 или 3, в базе данных все еще создаются 10 строк. Вы знаете, как это изменить? – Ant100

ответ

0

Помните, что вход-> пост() возвращает ложь, если значение не установлено. Поэтому проверьте, установлено ли значение для его размещения в массиве. Затем, когда модель получит его. Это спасает их всех. Или другой вариант состоит в том, чтобы создать новый массив в модели из массива, который передается, а затем передать новый массив функции insert_batch().

$items = array(); 

$id = $this->input->post('id1', true); 
if($id != false) { 
    $items[] = array(
     'id'   => $id, true), 
     'hotel_id'  => $hotel_id, 
     'des_servicio' => $this->input->post('des_servicio1', true), 
     'est_activo' => $this->input->post('est_activo1', true) 
    ); 
} 

$id = $this->input->post('id2', true); 
if($id != false) { 
    $items[] = array(
     'id'   => $id, true), 
     'hotel_id'  => $hotel_id, 
     'des_servicio' => $this->input->post('des_servicio2', true), 
     'est_activo' => $this->input->post('est_activo2', true) 
    ); 
} 
.... 
+0

спасибо! Я сделал что-то похожее на это, а затем использовал array_filter() для удаления пустых массивов, чтобы передать его в insert_batch(). Еще раз спасибо за ваше время :) – Ant100

1
foreach $items //I get an error here 
    as $item 

должен быть

foreach ($items as $item) 
+0

О, это просто ошибка sintax, которую я сделал в момент ввода, мне жаль, что у моего исходного кода есть круглые скобки. Я попробую прямо сейчас, что вы сказали с помощью insert_batch. – Ant100

Смежные вопросы