2013-07-18 4 views
0

Я хочу вставить записи (которые я получил из таблицы) в другую таблицу с помощью codeigniter. вот функция добавления записи. Я передать $ nokw для вставки в другую таблицу в качестве внешнего ключа .:Вставить несколько записей в таблицу с помощью codeigniter

function add_detail($nokw){ 
    $id_sj = $this->session->userdata('id'); 
    $upddate = date('Y')."-".date('m')."-".date('d')." ".date('H').":".date('i').":".date('s'); 
    $i=0; 
    $this->suratjalan->where('IDDeliveryNo',$id_sj); 
    $rec = $this->suratjalan->get("t02deliveryno_d")->result_array(); 

    // parse the result and insert it into an array 
    foreach ($rec as $det){ 
    $i++; 
     $detail[$i] = array(
      'ID' => '', 
      'NoKwitansi' => $nokw, 
      'TypeProduct'=> $det['TypeProduct'], 
      'PartNo' => $det['PartNo'], 
      'PartNoVendor'=> $det['PartNoVendor'], 
      'SerialPanel' => $det['SerialPanel'], 
      'Description' => $det['Description'], 
      'Dimension' => $det['Dimension'], 
      'DescriptionVendor' => $det['DescriptionVendor'], 
      'DimensionVendor' => $det['DimensionVendor'], 
      'PrintedProduct' => $det['PrintedProduct'], 
      'Qty' => $det['Qty'], 
      'UoM' => $det['UoM'], 
      'Remark' => $det['Remark'], 
      'UpdUser'=> $this->session->userdata('user'), 
      'UpdDate'=> $upddate 
     ); 

     // insert the record 
     $this->finance->insert('t02fkpd',$detail[$i]); 
    } 
} 

Он работает, но он не работает, если более чем один ряд возвращается из таблицы «t02deliveryno_d». Я думаю, что ошибка возникает, когда я вставляю запись. Я использую $i++, чтобы сделать другой индекс в массиве $detail.

Как исправить это, чтобы правильно вставить несколько строк?

+0

Просьба показать схему базы данных таблицы 't02fkpd'. – jcsanyi

+0

Можете ли вы рассказать мне, как это показать? Извините, я действительно новичок здесь. могу ли я показать его по снимку экрана? –

+0

Я не могу загрузить схему ..:/ –

ответ

0

Вы не указали схему db, но я предполагаю, что t02fkpd.ID является автоинкрементным столбцом.

Если это так, проблема заключается в том, что вы указываете пустое значение для ID, а не позволяете базе данных обрабатывать его. Вероятно, это приводит к попытке вставить повторяющиеся строки с тем же (пустым) id.

Вот обновленная версия вашей функции, что я подозреваю, что будет работать лучше:

function add_detail($nokw) { 
    $id_sj = $this->session->userdata('id'); 
    $upddate = date('Y-m-d H:i:s'); 
    $this->suratjalan->where('IDDeliveryNo',$id_sj); 
    $rec = $this->suratjalan->get("t02deliveryno_d")->result_array(); 
    foreach ($rec as $det) { 
     $details = array(
      'NoKwitansi' => $nokw, 
      'TypeProduct'=> $det['TypeProduct'], 
      'PartNo' => $det['PartNo'], 
      'PartNoVendor'=> $det['PartNoVendor'], 
      'SerialPanel' => $det['SerialPanel'], 
      'Description' => $det['Description'], 
      'Dimension' => $det['Dimension'], 
      'DescriptionVendor' => $det['DescriptionVendor'], 
      'DimensionVendor' => $det['DimensionVendor'], 
      'PrintedProduct' => $det['PrintedProduct'], 
      'Qty' => $det['Qty'], 
      'UoM' => $det['UoM'], 
      'Remark' => $det['Remark'], 
      'UpdUser'=> $this->session->userdata('user'), 
      'UpdDate'=> $upddate 
     ); 
     $this->finance->insert('t02fkpd',$details); 
    } 
} 

Помимо удаления значения ID, я также сделал следующие незначительные изменения:

  1. Я удалил $i и просто повторно использовал одну и ту же переменную для построения массива значений для вставки. Вы не используете массив после вставки, поэтому нет необходимости создавать список всех строк - вы можете просто перезаписать его каждый раз.

  2. Я изменил ваш счет $upddate, позвонив по телефону date() один раз. Вы можете указать целую строку формата в одном вызове - вы не ограничены только одним символом за раз.

+0

это моя предыдущая версия, прежде чем добавить автоинкремент $ i. : D и это не работало. –

+0

Включая без значения 'ID' в массиве? – jcsanyi

+0

ya, я попробовал –

0

У меня нет правильного вопроса. Но я думаю, что http://ellislab.com/codeigniter/user-guide/database/active_record.html#insert определенно поможет вам.

Вы можете сделать массив и передать его функции insert_batch с именем таблицы и массивом. Это определенно поможет вам.

если вы, должно быть, проверили user-guide для codeigniter. это одна из хороших документов, где каждая документация документирована.

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