Phalcon批量插入数据记录

【Phalcon批量插入数据记录】在开发 酷瓜云课堂(开源知识付费解决方案)的过程中,需要一次插入几千条数据,官方文档里没有相关批量操作的指引,自己动手才能丰衣足食。
Phalocn 默认的 Model 和 PHQL 是不支持批量插入记录的,如果用循环插入几百上千成万的记录,那效率不知道有多低。使用Phalcon底层的 db 操作可以支持原生 SQL,拼装一下 SQL 语句就可以批量插入记录了。
语句拼装函数

/** * 批量插入SQL * * @param string $table * @param array $rows * @return false|string */ function kg_batch_insert_sql($table, $rows = []) { if (count($rows) == 0) return false; $fields = implode(',', array_keys($rows[0])); $values = []; foreach ($rows as $row) { $values[] = sprintf('(%s)', implode(',', $row)); }$values = implode(',', $values); return sprintf("INSERT INTO %s (%s) VALUES %s", $table, $fields, $values); }

使用方法案例
$logModel = new QQDeliverLogModel(); $table = $logModel->getSource(); $rows = []; $createTime = time(); foreach ($groupUsers as $groupUser) { $rows[] = [ 'task_id' => $task->id, 'group_id' => $groupUser->group_id, 'user_id' => $groupUser->user_id, 'create_time' => $createTime, ]; }$sql = kg_batch_insert_sql($table, $rows); try { $this->db->begin(); $this->db->execute($sql); $this->db->commit(); } catch (\Exception $e) { $this->db->rollback(); }

    推荐阅读