tp6框架 万级数据入库 php函数优化
将万级数据入库并判断有无 没有则新增 上篇是用mysql的replace into实现 本篇是另一种方法
这是我的数据格式:
$data = [
[ 'KCH' => 'value1', 'other_column1' => 'value_other1_1', 'other_column2' => 'value_other2_1', ], [ 'KCH' => 'value2', 'other_column1' => 'value_other1_2', 'other_column2' => 'value_other2_2'],
];
$kchValues = array_column($data, 'code'); $existingRecords = SchoolSelfCourse::whereIn('code', $kchValues)->select(); $existingKCHValues = array_flip(array_column($existingRecords->toArray(), 'code')); $dataToInsert = array_filter($data, function ($record) use ($existingKCHValues) { return !isset($existingKCHValues[$record['code']]); }); if (!empty($dataToInsert)) { return SchoolSelfCourse::insertAll($dataToInsert); }
code字段为数据唯一标识
虽然此种方法比replace into耗时稍长 但不会改变数据的自增id