在开发 酷瓜云课堂(开源常识付费解决方案)的过程中,须要一次插入几千条数据,官网文档里没有相干批量操作的指引,本人入手能力饥寒交迫。

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();}