php - 循环通过批处理 Codeigniter
问题描述
我正在使用insert_batch()
函数将数据插入数据库。
我想拆分这个过程。我的意思是,如果我想创建 10,000 个序列号。但是一次 1,000 行,它应该循环运行创建过程 10 次。
我怎样才能做到这一点?
$serial_numbers = $this->serial_numbers_model->generate_serial_numbers($product_id, $partner_id, $serial_number_quantity, $serial_number_start);
$issued_date = date("Y-m-d H:i:s");
$inserted_rows = 0;
foreach ($serial_numbers as $sn) {
$check_number = $this->serial_numbers_model->generate_check_number();
$first_serial_number = reset($serial_numbers);
$last_serial_number = end($serial_numbers);
$inserted_rows++;
$insert_data[] = array(
'partner_id' => $partner_id,
'product_id' => $product_id,
'check_number' => $check_number,
'serial_number' => $sn,
'issued_time' => $issued_date,
'serial_number_status' => CREATE_STATUS
);
}
$this->serial_numbers_model->insert_batch($insert_data);
}
解决方案
可能您serial_numbers_model->insert_batch()
的只是 Codeigniter 原生的包装器insert_batch()
?为了清楚起见,下面的代码使用本机代码,根据需要将其替换为您的代码。
// Track how many in your batch, and prepare empty batch array
$count = 0;
$insert_data = [];
foreach ($serial_numbers as $sn) {
// ... your code, prepare your data, etc ...
$count++;
$insert_data[] = array(
// ... your data ...
);
// Do you have a batch of 1000 ready?
if ($count === 1000) {
// Yes - insert it
$this->db->insert_batch('table', $insert_data);
// $this->serial_numbers_model->insert_batch($insert_data);
// Reset the count, and empty the batch, ready to start again
$count = 0;
$insert_data = [];
}
}
// Watch out! If there were 1001 serial numbers, the first 1000 were handled,
// but the last one hasn't been inserted!
if (sizeof($insert_data)) {
$this->db->insert_batch('table', $insert_data);
}
推荐阅读
- notifications - Nativescript 中带有按钮的持久通知
- git - Git - master 上的两种不同状态
- assembly - NASM:通过寄存器从内存移动到内存
- python - 将给定二维数组中的列递归转置到新二维数组的行
- r - 如何在 R 中绘制多元函数
- mysql - 将csv文件导入mysql docker容器
- python - 将用户输入“映射”到特定变量
- javascript - req.body.object 未定义
- python - cvxpy.error.DCPError:问题不遵循 DCP 规则
- ios - UINaviagationBar 忽略背景颜色设置