1 回答
TA贡献1859条经验 获得超6个赞
在您的表中查询包含
sr_no
您的$dataSet
.然后将键应用于值中的结果集行
sr_no
——这允许根据旧数据快速查找新数据(以查看是否应插入相应的新行、作为更新执行或完全忽略,因为数据是相同的。
未经测试的建议:
function insertUpdateMacroPlan($dataSet)
{
$keyedExistingRows = array_column(
$this->db
->where_in('sr_no', array_column($dataSet, 'sr_no'))
->get('macro_plan')
->result_array(),
null,
'sr_no'
);
foreach ($dataSet as $data) {
if (isset($keyedExistingRows[$data['sr_no']])) {
// sr_no exists in the db, add known id to new data array
$identified = ['id' => $keyedExistingRows[$data['sr_no']]['id']] + $data;
if ($identified != $keyedExistingRows[$data['sr_no']]) {
$updateBatch[] = $identified;
}
// if the arrays contain the same data, the new data will be discarded
} else {
$insertBatch[] = $data;
}
}
if (!empty($insertBatch)) {
$this->db->insert_batch('macro_plan', $insertBatch);
}
if (!empty($updateBatch)) {
$this->db->update_batch('macro_plan', $updateBatch, 'id');
}
}
ps 如果您的业务逻辑要求sr_no值是唯一的,我建议您通过将sr_no列设置为唯一键来反映在您的表配置中。
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报