简体   繁体   中英

insert multiple record to a table with codeigniter

I want to insert the records (that i got from a table) to another table using codeigniter. here's the function to add the record. I pass the $nokw to insert to another table as foreign key.:

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]);
    }
}

It works, but it doesn't work if more than one row is returned from the table 't02deliveryno_d'. I think the error comes when i insert the record. i use the $i++ to make different index in $detail array.

How can I fix this to properly insert multiple rows?

I haven't get your question properly. But i think http://ellislab.com/codeigniter/user-guide/database/active_record.html#insert with definitely help you.

You can make a array and pass it to insert_batch function with the table name and array. This will definitely help you.

if you must have checked user-guide for codeigniter. its one of the good documentation, where each and every function is documented.

You didn't show the db schema, but I'm assuming that t02fkpd.ID is an auto-incrementing column.

If that's the case, the problem is that you're specifying a blank value for ID instead of letting the database handle it. This is probably resulting in attempts to insert duplicate rows with the same (blank) id.

Here's an updated version of your function that I suspect will work better:

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);
    }
}

Beyond removing the ID value, I also made the following minor changes:

  1. I removed $i and just reused the same variable for building the array of values to insert. You're not using the array after you insert, so there's no need to build a list of all the rows - you can just overwrite it each time.

  2. I changed your the $upddate calculation to only call date() once. You can specify an entire format string in one call - you're not restricted to just a single character at a time.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM