我的表格包含具有唯一索引的单元格( hashCheck )。是否可以使用 insert_batch ,捕获已经在db(重复项)中的所有条目,将它们放入数组并插入新记录?这是我目前使用的代码:
public function insertSerials($serials, $type)
{
$data = [];
$now = date('Y-m-d H:i:s');
foreach ($serials as $serial):
$data[] = [
'serial' => $this->encryption->encrypt($serial),
'hashCheck' => hash('xxx', $serial),
'type' => $type,
'date_added' => $now,
];
endforeach;
try {
$this->db->insert_batch($this->_table_name, $data);
} catch (Exception $e) {
var_dump('<pre>', $e, '</pre>');
}
}
答案 0 :(得分:0)
这是我能想到实现目标的唯一方式。也许不那么优雅,但它应该有效。
public function insertSerials($serials, $type)
{
$data = [];
$pre_existing = [];
$now = date('Y-m-d H:i:s');
foreach($serials as $serial)
{
$data[] = [
'serial' => $this->encryption->encrypt($serial),
'hashCheck' => hash('xxx', $serial),
'type' => $type,
'date_added' => $now,
];
//test for existing hashCheck
$query = $this->db->get_where($this->_table_name,
array('hashCheck' => $data['hashCheck']));
if($query->num_rows() > 0)
{
$pre_existing[] = $data;
}
else
{
$this->db->insert($this->_table_name, $data);
}
}
}
将db->insert()
置于循环中会感觉很糟糕,除了insert_batch()
最终会这样做。