phpcodeignitermodel-view-controllercodeigniter-3batch-insert

How to INSERT a batch of database records in CodeIgniter


I want to insert multiple records into my database table with a FK, but my code only inserts one line of records.

It could be that I do not count the $count. Here is my code:

Model

public function create($table,$data)
{
    $query = $this->db->insert($table, $data);
    return $this->db->insert_id();
}

Controller

public function save($id)
{
    $id_form = $id;
    $id_interversion = $this->model->create('mytable1', $data);
    $Inicio = $_POST['Inicio'];
    $Termino = $_POST['Termino'];
    $id_tecnico = $_POST['id_tecnico'];
    $count = count($_POST['id_tecnico']);
    $data2 = array();
    for ($i = 0; $i < $count; $i++) {
        $data2 = array(
            'id_tecnico' => $id_tecnico[$i],
            'horaInicio' => $Inicio[$i],
            'Termino' => $Termino[$i]
        );
        $this->model->create('mytable2', $data2);
    }
}

view

<?php echo form_open("controller/save/{$data->id}"); ?>
    <?php for ($i = 0; $i < 2; $i++) { ?>
        <input type="text" name="id_tecnico[]"  value="" class="form-control">
        <input type="text" name="Inicio[]"  value="" class="form-control">
        <input type="text" name="Termino[]"  value="" class="form-control">
    <?php } ?>
<?php echo form_close(); ?>

Solution

  • Try with insert_batch like this :

    public function save($id = NULL)
    {
        $id_form = $id;
        //$id_interversion = $this->model->create('mytable1',$data);
        $id_interversion = 12; // a custom id
        $Inicio = $this->input->post('Inicio');
        $Termino = $this->input->post('Termino');
        $id_tecnico = $this->input->post('id_tecnico');
        foreach ($id_tecnico as $key => $item) 
        {
            $insert_data[] = array(
                    'id_interversion' => $id_interversion,
                    'id_tecnico'=> $item,
                    'horaInicio'=> $Inicio[$key],
                    'Termino'=> $Termino[$key]
                  );
        }
        //print_r($insert_data);die;
        $this->db->insert_batch('mytable2',$insert_data);
    }