我想使用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
数组中生成不同的索引。
如何解决此问题以正确插入多行?
答案 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
值之外,我还进行了以下微小更改:
我删除了$i
并重新使用相同的变量来构建要插入的值数组。插入后您没有使用该数组,因此无需构建所有行的列表 - 您每次都可以覆盖它。
我将$upddate
计算更改为仅调用date()
一次。您可以在一次调用中指定整个格式字符串 - 您一次不仅限于一个字符。