使用codeigniter将多个记录插入到表中

时间:2013-07-18 03:12:16

标签: php mysql codeigniter

我想使用codeigniter将记录(我从表中获取)插入到另一个表中。 这是添加记录的功能。我将$ nokw作为外键传递给另一个表:

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数组中生成不同的索引。

如何解决此问题以正确插入多行?

2 个答案:

答案 0 :(得分:0)

我没有正确地回答你的问题。但我认为http://ellislab.com/codeigniter/user-guide/database/active_record.html#insert绝对可以帮到你。

您可以创建一个数组并使用表名和数组将其传递给insert_batch函数。这肯定会对你有帮助。

如果您必须已检查user-guide的codeigniter。它是一个很好的文档,其中记录了每个函数。

答案 1 :(得分:0)

您没有显示数据库架构,但我假设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()一次。您可以在一次调用中指定整个格式字符串 - 您一次不仅限于一个字符。