0

我想使用 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

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

4

2 回答 2

0

我没有正确理解你的问题。但我认为http://ellislab.com/codeigniter/user-guide/database/active_record.html#insert对你有帮助。

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

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

于 2013-07-18T04:05:36.083 回答
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()一次。您可以在一次调用中指定整个格式字符串 - 您一次不限于单个字符。

于 2013-07-18T04:14:32.483 回答