有没有办法从codeigniter中的批量插入中获取最后插入的ID?
这可能看起来很傻但我不知道是否有任何帮助。
答案 0 :(得分:1)
您需要在循环中运行插入,这是获取每个ID的唯一方法。为了减轻服务器上的压力,您可以在事务中执行此操作。
$ids = array();
$this->db->trans_start();
foreach($data as $val){
$this->db->insert('yourTable', array(
'field1' => $val['foo'],
'field2' => $val['bar']
));
$ids[] = $this->db->insert_id();
}
$this->db->trans_complete();
答案 1 :(得分:1)
由于$this->db->insert_id();
应返回批处理中第一行的ID,因此您只需向其中添加受影响的行数即可。但当然,假设这是可能的,因为你正在使用自动增量。
正如Rocket Hazmat指出的那样,自动增量值可能会有变化。但是,如果我们知道增量值,这不是问题。所以,这样的事情应该有效:
$increment = 2; // auto-increment value (probably 1 though)
$id = $this->db->insert_id(); // id of the first inserted row from the batch
$total = $this->db->affected_rows(); // number of inserted rows
$ids = array($id); // add the first on to our output array of ids
for ($i = 1; $i < $total; $i += $increment) {
$ids[] = $id + $i; // add each of them
}